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

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 में परिभाषित किया गया है और इसमें बताया गया कोई भी OEM कस्टम उपयोगकर्ता टाइप frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. ज़्यादा जानकारी के लिए, उपयोगकर्ता टाइप पेज देखें जानकारी. फ़िलहाल, एओएसपी उपयोगकर्ता टाइप में ये शामिल हैं:

  • 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.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 टैग किसी भी फ़ाइल में 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>