एंड्रॉइड 9 और उच्चतर में एंड्रॉइड बिल्ड सिस्टम का उपयोग करके product
विभाजन बनाने के लिए समर्थन शामिल है। पहले, एंड्रॉइड 8.x ने एंड्रॉइड system
से निर्मित ओईएम-विशिष्ट घटकों के लिए स्थान समर्पित किए बिना एसओसी-विशिष्ट घटकों को सिस्टम विभाजन से vendor
विभाजन में अलग करने को लागू किया था। एंड्रॉइड 9 और उच्चतर अतिरिक्त अनुमतियाँ और श्वेतसूची सुविधाएँ प्रदान करता है जो विभिन्न विभाजनों पर निजी-ऐप्स पर लागू होती हैं।
उत्पाद विभाजन के बारे में
कई ओईएम अपनी सुविधाओं के साथ-साथ वाहक आवश्यकताओं को लागू करने के लिए एओएसपी सिस्टम छवि को अनुकूलित करते हैं। हालाँकि, ऐसे अनुकूलन एकाधिक सॉफ़्टवेयर SKU के लिए एकल सिस्टम छवि का उपयोग करना असंभव बना देते हैं। अनुकूलन का समर्थन करने के लिए प्रत्येक छवि अलग-अलग होनी चाहिए, जैसे कि अलग-अलग स्थानों या वाहकों के साथ। अनुकूलन को शामिल करने के लिए एक अलग product
विभाजन का उपयोग करने से एकाधिक सॉफ़्टवेयर SKU के लिए एकल सिस्टम छवि का उपयोग करना संभव हो जाता है। ( system
विभाजन सामान्य कोड को होस्ट करता है जिसे कई सॉफ़्टवेयर SKU के बीच साझा किया जा सकता है)। vendor
विभाजन SoC-विशिष्ट बीएसपी कोड को होस्ट करना जारी रखता है जिसे दिए गए SoC के आधार पर कई उपकरणों के बीच साझा किया जा सकता है।
अलग-अलग विभाजनों का उपयोग करने के कुछ नुकसान हैं, जैसे डिस्क स्थान का प्रबंधन करना (भविष्य के विकास के लिए सीमित मात्रा में स्थान आरक्षित रहना चाहिए) और विभाजनों के बीच एक स्थिर एप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) बनाए रखना । product
विभाजन का उपयोग करने का निर्णय लेने से पहले, अपने अद्वितीय एओएसपी कार्यान्वयन और संभावित शमन रणनीति पर विचार करने के लिए समय लें (जैसे ओवर-द-एयर (ओटीए) अपडेट के दौरान डिवाइस को दोबारा विभाजित करना, जो Google द्वारा नहीं किया जाता है लेकिन कुछ ओईएम द्वारा किया जाता है ). डायनामिक विभाजन इसके लिए एक अच्छा समाधान होगा।
उत्पाद विभाजन और अनुमतियाँ
एंड्रॉइड 9 और उच्चतर में, अनुमतियों और श्वेतसूची प्रक्रिया में बदलाव से यह प्रभावित होता है कि आप अपने `उत्पाद` विभाजन पर निजी-ऐप्स अनुमतियां कैसे देते हैं। permissions.xml
फ़ाइल को प्राइवेट-ऐप्स के समान विभाजन में रहना चाहिए। प्राइवेट-ऐप्स के लिए system
विभाजन में एक permissions.xml
फ़ाइल रखने से product
विभाजन में प्राइवेट-ऐप्स के लिए उन अनुमतियों का विस्तार नहीं होता है, भले ही पूर्व बाद वाले का विस्तार हो। अनुमतियों और श्वेतसूची प्रक्रियाओं के विवरण के लिए, विशेषाधिकार प्राप्त अनुमति अनुमति सूची देखें।
विरासत/ओईएम बनाम/उत्पाद
उत्पाद इंटरफ़ेस प्रवर्तन के आधार पर हमारे पास product
विभाजन की दो प्रकार की विशेषताएँ हैं। साथ ही, product
विभाजन पुराने oem
विभाजन से भिन्न है:
PARTITION | गुण |
---|---|
oem |
|
product |
|
product (प्रबलित इंटरफ़ेस) |
|
इन कारणों से, एंड्रॉइड 9 product
विभाजन का समर्थन करता है, जबकि उस पर निर्भर उपकरणों के लिए पुराने oem
विभाजन का समर्थन बरकरार रखता है। system
विभाजन से product
विभाजन को अलग करने के लिए, एंड्रॉइड 11 product
इंटरफेस लागू करने का समर्थन करता है।
/उत्पाद घटक
product
विभाजन में निम्नलिखित घटक शामिल हैं:
- उत्पाद-विशिष्ट सिस्टम गुण (
/product/build.prop
) - उत्पाद-विशिष्ट आरआरओ (
/product/overlay/*.apk
) - उत्पाद-विशिष्ट ऐप्स (
/product/app/*.apk
) - उत्पाद-विशिष्ट निजी-ऐप्स (
/product/priv-app/*.apk
) - उत्पाद-विशिष्ट पुस्तकालय (
/product/lib/*
) - उत्पाद-विशिष्ट जावा लाइब्रेरी (
/product/framework/*.jar
) - उत्पाद-विशिष्ट एंड्रॉइड फ्रेमवर्क सिस्टम कॉन्फ़िगरेशन (
/product/etc/sysconfig/*
और/product/etc/permissions/*
) - उत्पाद-विशिष्ट मीडिया फ़ाइलें (
/product/media/audio/*
) - उत्पाद-विशिष्ट
bootanimation
फ़ाइलें
कोई कस्टम_इमेज नहीं
आप custom_images
उपयोग नहीं कर सकते. उनके पास निम्नलिखित के लिए समर्थन का अभाव है:
- किसी विशिष्ट लक्ष्य में मॉड्यूल स्थापित करना ।
custom_images
एक छवि में कलाकृतियों की प्रतिलिपि बनाने का समर्थन करते हैं लेकिन बिल्ड नियम के एक भाग के रूप में इसके लक्ष्य विभाजन को निर्दिष्ट करके एक मॉड्यूल को एक विशिष्ट विभाजन में स्थापित नहीं कर सकते हैं। - जल्द ही समर्थन .
custom_images
सूंग बिल्ड सिस्टम का उपयोग करके नहीं बनाया जा सकता है। - ओटीए अद्यतन समर्थन ।
custom_images
का उपयोग फ़ैक्टरी ROM छवियों के रूप में किया जाता है जो OTA अपडेट प्राप्त नहीं कर सकते हैं।
विभाजनों के बीच एबीआई को बनाए रखना
एंड्रॉइड 9 में product
विभाजन system
विभाजन का विस्तार है। product
और system
विभाजन के बीच एक कमजोर एबीआई है, इसलिए दोनों को एक ही समय में अपग्रेड किया जाना चाहिए, और एबीआई सिस्टम एसडीके-आधारित होना चाहिए। यदि सिस्टम एसडीके product
और system
के बीच सभी एपीआई सतहों को कवर नहीं करता है, तो ओईएम को दो विभाजनों के बीच अपना स्वयं का एबीआई बनाए रखना होगा।
product
और system
विभाजन एक दूसरे पर निर्भर हो सकते हैं। हालाँकि, जेनेरिक सिस्टम इमेज (जीएसआई) के साथ परीक्षण product
विभाजन के बिना ठीक से काम करना चाहिए।
जब product
इंटरफ़ेस लागू किया जाता है, तो product
विभाजन को system
विभाजन से अलग कर दिया जाता है। product
विभाजन system
विभाजन से केवल अनुमत इंटरफ़ेस का उपयोग करता है।
product
विभाजन में vendor
विभाजन पर अस्थिर इंटरफ़ेस के माध्यम से कोई निर्भरता नहीं होनी चाहिए। product
और vendor
विभाजन के बीच सीधा संपर्क निषिद्ध है। (यह SEpolicy द्वारा लागू किया गया है।)
उत्पाद विभाजन लागू करना
नए उत्पाद विभाजन को लागू करने से पहले, AOSP में संबंधित उत्पाद विभाजन परिवर्तनों की समीक्षा करें। फिर, product
स्थापित करने के लिए, निम्नलिखित बोर्ड या उत्पाद-निर्माण झंडे शामिल करें:
-
BOARD_USES_PRODUCTIMAGE
-
BOARD_PRODUCTIMAGE_PARTITION_SIZE
-
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
-
/product/build.prop
के लिएPRODUCT_PRODUCT_PROPERTIES
। ये$(call inherit-product path/to/device.mk)
के भीतर होने चाहिए, जैसाPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
में है।
उत्पाद विभाजन में एक मॉड्यूल स्थापित करना
product
विभाजन में मॉड्यूल स्थापित करने के लिए निम्नलिखित बिल्ड फ़्लैग का उपयोग करें।
-
product_specific: true
Android.bp
में सत्य -
LOCAL_PRODUCT_MODULE := true
Android.mk
में सत्य
सत्यापित बूट सक्षम करना
product
विभाजन को दुर्भावनापूर्ण सॉफ़्टवेयर द्वारा छेड़छाड़ से बचाने के लिए, उस विभाजन के लिए Android सत्यापित बूट (AVB) सक्षम करें (जैसा कि आप vendor
और system
विभाजन के लिए करते हैं)। AVB को सक्षम करने के लिए, निम्नलिखित बिल्ड फ़्लैग शामिल करें: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
।