Android 9 और उच्चतर में Android बिल्ड सिस्टम का उपयोग करके product
विभाजन बनाने के लिए समर्थन शामिल है। पहले, एंड्रॉइड 8.x ने एंड्रॉइड बिल्ड सिस्टम से निर्मित ओईएम-विशिष्ट घटकों के लिए स्थान समर्पित किए बिना system
विभाजन से एसओसी-विशिष्ट घटकों को vendor
विभाजन में अलग किया। एंड्रॉइड 9 और उच्चतर अतिरिक्त अनुमतियां और श्वेतसूची सुविधाएं प्रदान करता है जो विभिन्न विभाजनों पर निजी-ऐप्स पर लागू होती हैं।
उत्पाद विभाजन के बारे में
कई ओईएम अपनी सुविधाओं के साथ-साथ वाहक आवश्यकताओं को लागू करने के लिए एओएसपी सिस्टम छवि को अनुकूलित करते हैं। हालांकि, ऐसे अनुकूलन एकाधिक सॉफ़्टवेयर SKU के लिए एकल सिस्टम छवि का उपयोग करना असंभव बनाते हैं। अनुकूलन का समर्थन करने के लिए प्रत्येक छवि अलग-अलग होनी चाहिए, जैसे कि विभिन्न स्थानों या वाहकों के साथ। अनुकूलन को शामिल करने के लिए एक अलग product
विभाजन का उपयोग करने से एकाधिक सॉफ़्टवेयर SKU के लिए एकल सिस्टम छवि का उपयोग करना संभव हो जाता है। ( system
विभाजन सामान्य कोड को होस्ट करता है जिसे कई सॉफ्टवेयर SKU के बीच साझा किया जा सकता है)। vendor
विभाजन एसओसी-विशिष्ट बीएसपी कोड की मेजबानी करना जारी रखता है जिसे दिए गए एसओसी के आधार पर कई उपकरणों के बीच साझा किया जा सकता है।
अलग-अलग विभाजनों का उपयोग करने के कुछ नुकसान हैं, जैसे डिस्क स्थान का प्रबंधन (भविष्य के विकास के लिए सीमित मात्रा में स्थान आरक्षित रहना चाहिए) और विभाजन के बीच एक स्थिर अनुप्रयोग बाइनरी इंटरफ़ेस (ABI) बनाए रखना । product
विभाजन का उपयोग करने का निर्णय लेने से पहले, अपने अद्वितीय एओएसपी कार्यान्वयन और संभावित शमन रणनीति पर विचार करने के लिए समय निकालें (जैसे कि ओवर-द-एयर (ओटीए) अपडेट के दौरान डिवाइस को पुन: विभाजित करना, जो Google द्वारा नहीं किया जाता है, लेकिन कुछ ओईएम द्वारा किया जाता है। ) इसके लिए गतिशील विभाजन एक अच्छा समाधान होगा।
उत्पाद विभाजन और अनुमतियाँ
एंड्रॉइड 9 और उच्चतर में, अनुमतियों और श्वेतसूची प्रक्रिया में परिवर्तन आपके `उत्पाद` विभाजन पर निजी-ऐप्स अनुमतियां प्रदान करने के तरीके को प्रभावित करता है। permissions.xml
फ़ाइल priv-apps के समान पार्टीशन में होनी चाहिए। system
विभाजन में priv-apps के लिए allows.xml फ़ाइल रखने से उन permissions.xml
को product
विभाजन में priv-apps तक विस्तारित नहीं किया जाता है, भले ही पहला बाद वाले का एक्सटेंशन है। अनुमतियों और श्वेतसूची प्रक्रियाओं के विवरण के लिए, विशेषाधिकार प्राप्त अनुमति अनुमति सूची देखें ।
विरासत / OEM बनाम / उत्पाद
उत्पाद इंटरफ़ेस प्रवर्तन के आधार पर हमारे पास product
विभाजन के दो प्रकार के गुण हैं। साथ ही, product
विभाजन पुराने oem
विभाजन से अलग है:
PARTITION | गुण |
---|---|
oem |
|
product |
|
product (लागू इंटरफेस) |
|
इन कारणों से, एंड्रॉइड 9 product
विभाजन का समर्थन करता है, जबकि उस पर निर्भर उपकरणों के लिए पुराने oem
विभाजन के लिए समर्थन बनाए रखता है। system
विभाजन से product
विभाजन को अलग करने के लिए, Android 11 product
इंटरफेस को लागू करने का समर्थन करता है।
/उत्पाद घटक
product
विभाजन में निम्नलिखित घटक होते हैं:
- उत्पाद-विशिष्ट सिस्टम गुण (
/product/build.prop
) - उत्पाद-विशिष्ट आरआरओ (
/product/overlay/*.apk
) - उत्पाद-विशिष्ट ऐप्स (
/product/app/*.apk
) - उत्पाद-विशिष्ट निजी-ऐप्स (
/product/priv-app/*.apk
) - उत्पाद-विशिष्ट पुस्तकालय (
/product/lib/*
) - उत्पाद-विशिष्ट जावा पुस्तकालय (
/product/framework/*.jar
) - उत्पाद-विशिष्ट Android फ्रेमवर्क सिस्टम कॉन्फिग (
/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
विभाजन के बीच एक कमजोर ABI है, इसलिए दोनों को एक ही समय में अपग्रेड किया जाना चाहिए, और ABI को सिस्टम SDK-आधारित होना चाहिए। यदि सिस्टम एसडीके 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
।