확인 Android에서는 애플리케이션 당 인터페이스 당 데이터 트래픽을 측정하는 방법



안드로이드 실시간 네트워크 상태 확인 (1)

android.net.TrafficStats 에 대한 확장을 구현하여 애플리케이션 당 APN 또는 APN 당 데이터 트래픽을 측정하고 싶습니다. 메소드 원형은 다음과 같습니다.

getInterfaceTxPackets(String interface)
getInterfaceRxPackets(String interface)
getInterfaceTxBytes(String interface)
getInterfaceRxBytes(String interface)
getUidInterfaceTxPackets(int uid,String interface)
getUidInterfaceRxPackets(int uid,String interface)
getUidInterfaceTxBytes(int uid,String interface)
getUidInterfaceRxBytes(int uid,String interface)

android_net_TrafficStats.cpp 에서 네이티브 메소드를 호출하고 네이티브 메소드가 일부 파일에서 트래픽 통계를 읽습니다.

  • 총 트래픽 통계 파일은 /sys/class/net/ 폴더에 있습니다.이 폴더에는 eth0, ip6tnl0, rmnet0, rmnet1, rmnet2, rmnet3과 같은 하위 폴더가 있습니다. 자세한 통계 파일은이 폴더에 저장됩니다.

  • 응용 프로그램 트래픽 통계 파일은 /proc/uid_stat/[uid]/

내 질문 :

  1. rmnet0, rmnet1, rmnet2, rmnet3.. 폴더를 rmnet0, rmnet1, rmnet2, rmnet3.. . 각 APN과 일치합니까? 일치 규칙은 무엇입니까? 그렇지 않으면 각 APN 트래픽 통계를 어떻게 얻을 수 있습니까?

  2. /proc/uid_stat/[uid]/, 폴더에는 tcp_rcvtcp_snd tcp_rcv 두 파일 만 있습니다. 각 APN 트래픽 통계에서 각 응용 프로그램을 얻으려면 어떻게해야합니까?


Android 4.0으로 전환하십시오. 여기서 Android 4.0은 데이터 사용 모니터링을 강화했습니다. 이제이 API는 인터페이스 당 uid 트래픽 정보를 수집하는 훨씬 더 복잡한 서비스 위에 놓이게됩니다.

각각의 인터페이스 이름과 관련된 의미는 없으므로 한 장치에서 찾은 특정 이름이 다른 장치에서 동일한 것을 의미한다고 가정 할 수는 없습니다.





traffic-measurement