android - एंड्रॉइड पर सिस्टम ऐप और विशेषाधिकार प्राप्त ऐप के बीच अंतर क्या है?



android-source (1)

तो 4.3 में सिस्टम अनुप्रयोगों की एक अवधारणा थी। एपीके /system/app में रखे गए APK को सिस्टम विशेषाधिकार दिए गए थे। 4.4 तक, "विशेषाधिकार प्राप्त ऐप" की एक नई अवधारणा है। निजीकृत ऐप्स /system/priv-app डायरेक्टरी में स्टोर किए जाते हैं और अलग तरह से व्यवहार किए जाते हैं। यदि आप PackageManagerService तहत AOSP सोर्स कोड देखते हैं, तो आपको नए तरीके जैसे दिखाई देंगे

static boolean locationIsPrivileged(File path) {
    try {
        final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
                .getCanonicalPath();
        return path.getCanonicalPath().startsWith(privilegedAppDir);
    } catch (IOException e) {
        Slog.e(TAG, "Unable to access code path " + path);
    }
    return false;
}

तो यहाँ एक स्थिति का उदाहरण है जहाँ ये भिन्न हैं।

public final void addActivity(PackageParser.Activity a, String type) {
...
if (!systemApp && intent.getPriority() > 0 && "activity".equals(type)) {
                intent.setPriority(0);
                Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity "
                        + a.className + " with priority > 0, forcing to 0");
            }
...

यह किसी भी गतिविधियों की प्राथमिकता को प्रभावित करता है जिन्हें सिस्टम एप्लिकेशन के रूप में परिभाषित नहीं किया गया है। ऐसा लगता है कि आप पैकेज मैनेजर के लिए एक गतिविधि नहीं जोड़ सकते हैं, जिसकी प्राथमिकता 0 से अधिक है, जब तक कि आप एक सिस्टम ऐप नहीं हैं। जहां तक ​​मैं बता सकता हूं कि यह विशेषाधिकार प्राप्त ऐप को नहीं रोकता है (यहां बहुत तर्क है, मैं गलत हो सकता हूं।)

मेरा सवाल यह है कि वास्तव में यह क्या मतलब है? अगर मेरा ऐप विशेषाधिकार प्राप्त है, लेकिन सिस्टम नहीं, तो इससे क्या फर्क पड़ेगा? PackageManagerService आप विभिन्न चीजें पा सकते हैं जो सिस्टम और विशेषाधिकार प्राप्त एप्लिकेशन के बीच भिन्न होती हैं, वे बिल्कुल समान नहीं हैं। विशेषाधिकार प्राप्त ऐप्स के पीछे किसी प्रकार की विचारधारा होनी चाहिए, अन्यथा वे सिर्फ कहते थे:

if locationIsPrivileged: app.flags |= FLAG_SYSTEM

और इसके साथ किया गया। यह एक नई अवधारणा है, और मुझे लगता है कि 4.4 के रूप में AOSP विकास करने वाले किसी भी व्यक्ति के लिए इस प्रकार के ऐप के बीच अंतर जानना महत्वपूर्ण होगा।


इसलिए कुछ खुदाई के बाद, यह स्पष्ट है कि निजी-ऐप्स में ऐप्स सिस्टम अनुमतियों के लिए योग्य हैं, उसी तरह जो पुराने ऐप सिस्टम-ऐप में होने से सिस्टम अनुमतियों का दावा करने के लिए योग्य होते थे। इस पर पाया जाने वाला एकमात्र आधिकारिक Google दस्तावेज़ीकरण एक प्रतिबद्ध संदेश के रूप में आया: प्रतिबद्ध हैश: ccbf84f44c9e6a5ed3c08673614826bb237afc54

कुछ सिस्टम ऐप दूसरों की तुलना में अधिक सिस्टम हैं

"सिग्नेचरऑरसिस्टम" की अनुमति अब सभी ऐप्स के लिए उपलब्ध नहीं है, जो इन / सिस्टम विभाजन के रहते हैं। इसके बजाय, एक नई / प्रणाली / निजी-ऐप निर्देशिका है, और केवल एप्लिकेशन जिनके एपीके उस निर्देशिका में हैं, उन्हें प्लेटफ़ॉर्म सर्टिफ़िकेट साझा किए बिना सिग्नेचरऑर्म्स सिस्टम अनुमतियों का उपयोग करने की अनुमति है। यह सिस्टम के संभावित कारनामों के लिए सतह क्षेत्र को कम कर देगा, अनुमति-संरक्षित संचालन तक पहुंच प्राप्त करने का प्रयास करने के लिए बंडल किए गए एप्लिकेशन।

ApplicationInfo.FLAG_SYSTEM ध्वज का मतलब यह है कि यह प्रलेखन में क्या कहता है: यह इंगित करता है कि एप्लिकेशन एपीके / सिस्टम विभाजन पर बंडल किया गया था। एक नया छिपा झंडा FLAG_PRIVILEGED पेश किया गया है जो इन अनुमतियों तक पहुँचने के वास्तविक अधिकार को दर्शाता है।

अपडेट: एंड्रॉइड 8.0 के रूप में निजी-ऐप, प्रिविलेज्ड परमिशन व्हाइटलिस्टिंग के साथ थोड़ा बदल गया है। निजी-ऐप में होने के अलावा, विभिन्न सिस्टम अनुमतियां प्राप्त करने के लिए आपके ऐप को एक श्वेतसूची में भी जोड़ा जाना चाहिए। इस बारे में जानकारी यहां पाई जा सकती है: https://source.android.com/devices/tech/config/perms-whitelist





android-source