ภาพรวมของเคอร์เนล

ฟังก์ชันการตรวจสอบและการติดตามปริมาณการใช้อินเทอร์เน็ตต่อแอปและที่มอบสิทธิ์นั้นใช้โมดูล xt_qtaguid ในเคอร์เนล Linux ของ android-3.0 (kernel/net/netfilter/xt_qtaguid) ฟังก์ชันการติดแท็กซ็อกเก็ตในเฟรมเวิร์ก (system/core/libcutils/qtaguid.c) นั้นอาศัยการมีอินเทอร์เฟซ /proc/net/xt_qtaguid/ctrl ที่ส่งออกโดยโมดูลเคอร์เนล xt_qtaguid เป็นส่วนใหญ่

quota2 โมดูล netfilter (เดิมเป็นส่วนหนึ่งของ xtables-addons) ช่วยให้คุณตั้งค่าขีดจำกัดโควต้าที่มีชื่อได้ และขยายการทำงานเพื่อรองรับการแจ้งเตือนพื้นที่ผู้ใช้เมื่อถึงขีดจำกัดที่กำหนด เมื่อถึงขีดจํากัดโควต้าแล้ว โมดูล quota2 จะทิ้งการรับส่งข้อมูลในเครือข่ายทั้งหมดที่ตามมา เฟรมเวิร์กยังระบุกฎเพิ่มเติมเพื่อจำกัดการรับส่งข้อมูลในเบื้องหลังสำหรับแอปได้ด้วย (ดูcom.android.server.NetworkManagementSocketTagger.setKernelCounterSetและandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND)

วิธีการทำงาน

qtaguid โมดูล netfilter จะติดตามการเข้าชมเครือข่ายตามแต่ละซ็อกเก็ตสําหรับทุกแอปโดยใช้ UID ที่ไม่ซ้ำกันของแอปที่เป็นเจ้าของ คอมโพเนนต์แท็ก 2 รายการจะเชื่อมโยงกับซ็อกเก็ตในระบบ รายการแรกคือ UID ซึ่งระบุแอปที่รับผิดชอบการโอนข้อมูลโดยไม่ซ้ำกัน (Linux อนุญาตให้ระบุความเป็นเจ้าของของซ็อกเก็ตเครือข่ายแต่ละรายการเป็น UID ของแอปที่เรียกใช้) ส่วนประกอบแท็กที่ 2 ใช้เพื่อรองรับการระบุลักษณะการเข้าชมเพิ่มเติมในหมวดหมู่ที่นักพัฒนาแอประบุ การใช้แท็กระดับแอปเหล่านี้จะช่วยให้แอปสามารถแบ่งกลุ่มการเข้าชมออกเป็นหมวดหมู่ย่อยได้หลายหมวดหมู่

ในกรณีที่แอปให้บริการโอนข้อมูลผ่านเครือข่าย เช่น ตัวจัดการการดาวน์โหลด บริการสตรีมมิงสื่อ ฯลฯ คุณสามารถระบุแหล่งที่มาของการเป็นเจ้าของการโอนข้อมูลผ่านเครือข่ายเป็น UID ของแอปที่ขอได้โดยใช้TrafficStats.setThreadStatsUid()การเรียกใช้ฟังก์ชัน ผู้เรียกต้องถือสิทธิ์ "android.permission.MODIFY_NETWORK_ACCOUNTING" เพื่อกำหนดการเป็นเจ้าของการรับส่งข้อมูลในเครือข่ายอีกครั้ง