प्रति-एप्लिकेशन/प्रतिनिधि डेटा उपयोग निगरानी और ट्रैकिंग कार्यक्षमता एंड्रॉइड-3.0 लिनक्स कर्नेल ( kernel/net/netfilter/xt_qtaguid
) में xt_qtaguid मॉड्यूल पर निर्भर करती है। फ्रेमवर्क में सॉकेट टैगिंग कार्यक्षमता ( system/core/libcutils/qtaguid.c
) मुख्य रूप से xt_qtaguid
कर्नेल मॉड्यूल द्वारा निर्यात किए गए /proc/net/xt_qtaguid/ctrl
इंटरफ़ेस के अस्तित्व पर निर्भर करती है।
कोटा 2 नेटफिल्टर मॉड्यूल (मूल रूप से quota2
xtables-addons
का हिस्सा) कार्यक्षमता को नामित कोटा सीमा निर्धारित करने की अनुमति देता है और कुछ सीमाओं तक पहुंचने पर उपयोगकर्ता स्थान को सूचित करने के लिए विस्तारित किया गया था। एक बार कोटा की सीमा पूरी हो जाने के बाद, quota2
मॉड्यूल बाद के सभी नेटवर्क ट्रैफ़िक को छोड़ देता है। फ्रेमवर्क किसी एप्लिकेशन के लिए पृष्ठभूमि डेटा ट्रैफ़िक को प्रतिबंधित करने के लिए अतिरिक्त नियम भी निर्दिष्ट कर सकता है ( com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
और android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
देखें)।
यह कैसे काम करता है?
qtaguid
netfilter मॉड्यूल स्वामित्व वाले एप्लिकेशन के अद्वितीय UID का उपयोग करके प्रत्येक एप्लिकेशन के लिए प्रति-सॉकेट आधार पर नेटवर्क ट्रैफ़िक को ट्रैक करता है। सिस्टम में किसी भी सॉकेट से जुड़े दो टैग घटक होते हैं। पहला यूआईडी है जो विशिष्ट रूप से उस एप्लिकेशन की पहचान करता है जो डेटा ट्रांसफर के लिए जिम्मेदार है (लिनक्स प्रत्येक नेटवर्क सॉकेट के स्वामित्व को कॉलिंग एप्लिकेशन के यूआईडी को सौंपने की क्षमता की अनुमति देता है)। दूसरे टैग घटक का उपयोग एप्लिकेशन डेवलपर निर्दिष्ट श्रेणियों में ट्रैफ़िक के अतिरिक्त लक्षण वर्णन का समर्थन करने के लिए किया जाता है। इन एप्लिकेशन स्तर टैग का उपयोग करके, एक एप्लिकेशन ट्रैफ़िक को कई उप-श्रेणियों में प्रोफाइल कर सकता है।
एक सेवा के रूप में नेटवर्क डेटा स्थानांतरण प्रदान करने वाले अनुप्रयोगों के मामले में, जैसे कि डाउनलोड प्रबंधक, मीडिया स्ट्रीमिंग सेवा, आदि, TrafficStats.setThreadStatsUid()
का उपयोग करके अनुरोध करने वाले एप्लिकेशन के यूआईडी को नेटवर्क डेटा स्थानांतरण के स्वामित्व का श्रेय देना संभव है। TrafficStats.setThreadStatsUid()
फ़ंक्शन कॉल। नेटवर्क ट्रैफ़िक के स्वामित्व को फिर से असाइन करने के लिए कॉलर के पास " android.permission.MODIFY_NETWORK_ACCOUNTING
" अनुमति होनी चाहिए।