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

ฟังก์ชันการติดตามการใช้ข้อมูลแบบต่อแอปและที่ได้รับมอบสิทธิ์ใช้โมดูล xt_qtaguid ในเคอร์เนล android-3.0 Linux (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)

หลักการทำงาน

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

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