पहले से इंस्टॉल किए गए सिस्टम पैकेज

Android की मदद से, एक ही डिवाइस पर कई उपयोगकर्ताओं को जोड़ा जा सकता है. ज़्यादा जानने के लिए, एक से ज़्यादा उपयोगकर्ताओं के लिए लेख पढ़ें. सभी सिस्टम पैकेज, Android के सभी तरह के उपयोगकर्ताओं के लिए काम के नहीं होते. इसलिए, अनुमति वाली सूची का इस्तेमाल करके यह तय किया जा सकता है कि हर तरह के उपयोगकर्ता के लिए कौनसे सिस्टम पैकेज पहले से इंस्टॉल होने चाहिए. ज़रूरत के मुताबिक सिस्टम पैकेज पहले से इंस्टॉल न करके, उपयोगकर्ता बनाने, शुरू करने, और मेमोरी के इस्तेमाल के समय को ऑप्टिमाइज़ किया जा सकता है.

frameworks/base/data/etc/preinstalled-packages-platform.xml के आधार पर बनाई गई सिस्टम कॉन्फ़िगरेशन एक्सएमएल फ़ाइलों का इस्तेमाल करके, यह तय करें कि नए उपयोगकर्ताओं के लिए, उपयोगकर्ता टाइप के आधार पर कौनसे सिस्टम पैकेज शुरू में इंस्टॉल किए जाने चाहिए. डिवाइस पर मौजूद सभी सिस्टम पैकेज के लिए, एक्सएमएल फ़ाइल में एक एंट्री होनी चाहिए. यह एंट्री, मेनिफ़ेस्ट के नाम से की जाती है. हालांकि, स्टैटिक ओवरले के लिए ऐसा नहीं होता. इनके लिए, ओवरले के टारगेट पैकेज की एंट्री के हिसाब से अपने-आप कार्रवाई की जाती है. डिवाइस को यहां दिए गए सिस्टम पैकेज के अलावा, दूसरे सिस्टम पैकेज को कैसे मैनेज करना चाहिए, यह config mode से कंट्रोल किया जाता है.

उपयोगकर्ता टाइप

उपयोगकर्ता के बुनियादी टाइप (हर उपयोगकर्ता कम से कम इनमें से एक टाइप का होता है):

उपयोगकर्ता किस तरह का है ब्यौरा
SYSTEM उपयोगकर्ता 0.
FULL कोई भी ऐसा उपयोगकर्ता जिसकी प्रोफ़ाइल न हो.
PROFILE प्रोफ़ाइल में मौजूद कोई व्यक्ति.

हर एट्रिब्यूट के बारे में पूरी जानकारी frameworks/base/core/java/android/content/pm/UserInfo.java में दी गई है.

अलग-अलग तरह के उपयोगकर्ताओं की जानकारी देकर, ज़्यादा बेहतर तरीके से कंट्रोल किया जा सकता है. ऐसा इसलिए, क्योंकि हर उपयोगकर्ता इनमें से किसी एक तरह का होता है. इनमें frameworks/base/core/java/android/os/UserManager.java में बताए गए AOSP उपयोगकर्ता टाइप और frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. में बताए गए OEM के कस्टम उपयोगकर्ता टाइप शामिल हैं. ज़्यादा जानकारी के लिए, उपयोगकर्ता टाइप पेज देखें. फ़िलहाल, AOSP के उपयोगकर्ताओं के टाइप में ये शामिल हैं:

  • android.os.usertype.full.SYSTEM
  • android.os.usertype.full.SECONDARY
  • android.os.usertype.full.GUEST
  • android.os.usertype.full.DEMO
  • android.os.usertype.full.RESTRICTED
  • android.os.usertype.profile.MANAGED
  • android.os.usertype.profile.PRIVATE
  • android.os.usertype.system.HEADLESS

उदाहरण

यहां दिए गए उदाहरणों में, इस्तेमाल के सबसे सामान्य उदाहरणों के बारे में बताया गया है:

  1. किसी सिस्टम पैकेज को सिर्फ़ उपयोगकर्ता 0 के लिए पहले से इंस्टॉल करने के लिए:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. किसी सिस्टम पैकेज को सभी मानव उपयोगकर्ताओं (जैसे, वेब ब्राउज़र) पर पहले से इंस्टॉल किया जा सकता है. इसका मतलब है कि इसे FULL या PROFILE टाइप के किसी भी उपयोगकर्ता पर इंस्टॉल किया जा सकता है. यह टाइप, सभी मानव उपयोगकर्ताओं को दिखाया जाता है:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. प्रोफ़ाइल उपयोगकर्ताओं को छोड़कर, सभी लोगों के डिवाइसों पर सिस्टम पैकेज पहले से इंस्टॉल हो. उदाहरण के लिए, इसे वॉलपेपर ऐप्लिकेशन पर लागू किया जा सकता है:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
  4. कुछ सिस्टम पैकेज, सभी उपयोगकर्ताओं के लिए ज़रूरी होते हैं. भले ही, वे किसी भी तरह के हों. ऐसे मामलों में, इनका इस्तेमाल करें:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  5. अलग-अलग तरह के उपयोगकर्ताओं के बारे में बताकर, ज़्यादा जानकारी वाले विकल्प भी उपलब्ध हैं. उदाहरण के लिए, यहां दिया गया सैंपल कोड, इस पैकेज को ऐसे किसी भी उपयोगकर्ता पर इंस्टॉल करता है जिसका उपयोगकर्ता टाइप, मैनेज की जा रही प्रोफ़ाइल या मेहमान है या SYSTEM के आधार टाइप का है.
    <install-in-user-type package="com.android.example">
        <install-in user-type="android.os.usertype.profile.MANAGED" />
        <install-in user-type="android.os.usertype.full.GUEST" />
        <install-in user-type="SYSTEM">
    </install-in-user-type>

do-not-install-in टैग

do-not-install-in टैग का इस्तेमाल करके, पैकेज को खास तरह के उपयोगकर्ताओं के डिवाइसों पर पहले से इंस्टॉल होने से भी रोका जा सकता है. ध्यान दें कि do-not-install-in टैग, किसी भी फ़ाइल में install-in टैग को बदल देते हैं. उदाहरण के लिए:

<install-in-user-type package="com.android.example">
    <install-in user-type="FULL" />
    <do-not-install-in user-type="android.os.usertype.full.GUEST"/>
</install-in-user-type>
अगर कोई उपयोगकर्ता android.os.usertype.full.GUEST टाइप (FULL का सबटाइप) है, तो यह पैकेज इंस्टॉल नहीं किया जाता, क्योंकि do-not-install-in टैग, install-in से ज़्यादा प्राथमिकता पाता है.

config.xml की मदद से, टैग के काम करने का तरीका कंट्रोल करना

कॉन्फ़िगरेशन रिसॉर्स की वैल्यू config_userTypePackageWhitelistMode इस सुविधा को कंट्रोल करती है. साथ ही, यह तय करती है कि कोई डिवाइस, उन सिस्टम पैकेज को कैसे समझता है जिनमें किसी भी तरह के उपयोगकर्ता टाइप के लिए कोई एंट्री नहीं है. ज़्यादा जानकारी के लिए, frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode देखें.

frameworks/base/core/res/res/values/config.xml में, config_userTypePackageWhitelistMode नाम वाले पूर्णांक को इन वैल्यू के कॉम्बिनेशन पर सेट करें. इन फ़्लैग को एक साथ इस्तेमाल किया जा सकता है. सबसे ज़रूरी फ़्लैग ये हैं:

वैल्यू ब्यौरा
0 (0b0000) बंद करें. सभी सिस्टम पैकेज इंस्टॉल करें.
1 (0b0001) लागू करें. सिस्टम पैकेज सिर्फ़ तब इंस्टॉल करें, जब वे अनुमति वाली सूची में शामिल हों.
4 (0b0100) अगर किसी पैकेज का नाम अनुमति वाली सूची में नहीं है, तो उसे डिफ़ॉल्ट रूप से अनुमति वाली सूची में शामिल माना जाएगा.
8 (0b1000) अनुमति वाली सूची वाली फ़ाइल में जिस पैकेज के बारे में नहीं बताया गया है उसे सिर्फ़ SYSTEM उपयोगकर्ता के लिए, अनुमति वाली सूची में शामिल माना जाएगा.

यहां दिया गया कॉन्फ़िगरेशन, इस सुविधा को चालू करता है, ताकि install-in और do-not-install-in टैग का पालन किया जा सके. हालांकि, इसमें ऐसे सिस्टम पैकेज को install-in के तौर पर माना जाता है जिनके बारे में नहीं बताया गया है. ऐसा सभी उपयोगकर्ताओं के लिए किया जाता है:

<integer name="config_userTypePackageWhitelistMode">5</integer>