Android 9 और उसके बाद के वर्शन में, Android बिल्ड सिस्टम का इस्तेमाल करके product
पार्टीशन बनाने की सुविधा शामिल है. पहले,
Android 8.x ने SoC के हिसाब से बने कॉम्पोनेंट को system
से vendor
में अलग करने की सुविधा लागू की थी. हालांकि, इसमें Android बिल्ड सिस्टम से बने OEM के हिसाब से बने कॉम्पोनेंट के लिए जगह नहीं दी गई थी. Android 9 और उसके बाद के वर्शन में, अतिरिक्त अनुमतियां और व्हाइटलिस्ट की सुविधाएं मिलती हैं. ये सुविधाएं, अलग-अलग पार्टीशन पर मौजूद निजी ऐप्लिकेशन पर लागू होती हैं.
प्रॉडक्ट के बंटवारे के बारे में जानकारी
कई OEM, अपनी सुविधाओं के साथ-साथ कैरियर की ज़रूरी शर्तों को लागू करने के लिए, AOSP सिस्टम इमेज को पसंद के मुताबिक बनाते हैं. हालांकि, पसंद के मुताबिक बदलाव करने पर, एक से ज़्यादा सॉफ़्टवेयर SKU के लिए, एक ही सिस्टम इमेज का इस्तेमाल करना मुश्किल हो जाता है. अपनी पसंद के मुताबिक बनाने के लिए, हर इमेज अलग होनी चाहिए. जैसे, अलग-अलग भाषाओं या कैरियर के हिसाब से. पसंद के मुताबिक बदलाव करने के लिए, अलग से product
पार्टीशन का इस्तेमाल करने से, एक से ज़्यादा सॉफ़्टवेयर SKU के लिए एक ही सिस्टम इमेज का इस्तेमाल किया जा सकता है. (system
partition में सामान्य कोड होस्ट किया जाता है, जिसे कई सॉफ़्टवेयर SKU के बीच शेयर किया जा सकता है). vendor
पार्टीशन में, SoC के हिसाब से BSP कोड होस्ट किया जाता है. इस कोड को, दिए गए SoC के आधार पर कई डिवाइसों के बीच शेयर किया जा सकता है.
अलग-अलग पार्टीशन का इस्तेमाल करने के कुछ नुकसान हैं. जैसे, डिस्क का स्टोरेज मैनेज करना (आने वाले समय में स्टोरेज की ज़रूरत के हिसाब से कुछ स्टोरेज रिज़र्व रखना ज़रूरी है) और पार्टीशन के बीच स्टैबल ऐप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) बनाए रखना. product
सेगमेंट का इस्तेमाल करने का फ़ैसला लेने से पहले, AOSP को अपने हिसाब से लागू करने और समस्या को कम करने के तरीकों के बारे में सोचें. जैसे, ओवर-द-एयर (ओटीए) अपडेट के दौरान डिवाइस का सेगमेंट फिर से बांटना. यह काम Google नहीं करता, बल्कि कुछ OEM करते हैं.
डाइनैमिक पार्टिशनिंग, इसके लिए एक अच्छा विकल्प है.
प्रॉडक्ट के अलग-अलग हिस्से और अनुमतियां
Android 9 और इसके बाद के वर्शन में, अनुमतियों और व्हाइटलिस्ट करने की प्रोसेस में हुए बदलाव से, आपके `प्रॉडक्ट` पार्टिशन पर निजी ऐप्लिकेशन की अनुमतियां देने के तरीके पर असर पड़ता है. permissions.xml
फ़ाइल को
उसी पार्टीशन में होना चाहिए जिसमें priv-apps मौजूद हैं. system
में permissions.xml
फ़ाइल को, product
में मौजूद निजी ऐप्लिकेशन के लिए डालने पर, product
में मौजूद निजी ऐप्लिकेशन के लिए उन अनुमतियों का इस्तेमाल नहीं किया जा सकता. भले ही, system
, product
का एक्सटेंशन हो.
अनुमतियों और व्हाइटलिस्ट करने की प्रोसेस के बारे में ज़्यादा जानने के लिए, खास अनुमति वाली व्हाइटलिस्ट देखें.
लेगसी /oem बनाम /product
प्रॉडक्ट इंटरफ़ेस लागू करने के तरीके के आधार पर, हमारे पास product
पार्टीशन के दो तरह के एट्रिब्यूट हैं. साथ ही, product
पार्टीशन, लेगसी oem
पार्टीशन से अलग होता है:
सेगमेंट | विशेषताएं |
---|---|
oem |
|
product |
|
product (लागू किए गए इंटरफ़ेस) |
|
इन वजहों से, Android 9 में product
पार्टीशन के साथ-साथ, oem
लेगसी पार्टीशन की सुविधा भी काम करती है. हालांकि, यह सुविधा सिर्फ़ उन डिवाइसों पर काम करती है जिनमें oem
लेगसी पार्टीशन का इस्तेमाल किया जाता है. product
partition को system
partition से अलग करने के लिए, Android 11 में product
इंटरफ़ेस लागू करने की सुविधा उपलब्ध है.
/product components
product
पार्टीशन में ये कॉम्पोनेंट होते हैं:
- प्रॉडक्ट से जुड़ी सिस्टम प्रॉपर्टी (
/product/build.prop
) - प्रॉडक्ट के हिसाब से आरआरओ (
/product/overlay/*.apk
) - प्रॉडक्ट से जुड़े ऐप्लिकेशन (
/product/app/*.apk
) - प्रॉडक्ट के हिसाब से बनाए गए निजी ऐप्लिकेशन (
/product/priv-app/*.apk
) - प्रॉडक्ट के हिसाब से लाइब्रेरी (
/product/lib/*
) - प्रॉडक्ट के हिसाब से Java लाइब्रेरी (
/product/framework/*.jar
) - प्रॉडक्ट के हिसाब से Android फ़्रेमवर्क के सिस्टम कॉन्फ़िगरेशन
(
/product/etc/sysconfig/*
और/product/etc/permissions/*
) - प्रॉडक्ट से जुड़ी मीडिया फ़ाइलें (
/product/media/audio/*
) - प्रॉडक्ट से जुड़ी
bootanimation
फ़ाइलें
कोई custom_images नहीं
custom_images
का इस्तेमाल नहीं किया जा सकता. इनमें ये सुविधाएं काम नहीं करतीं:
- किसी खास टारगेट में मॉड्यूल इंस्टॉल करना.
custom_images
, आर्टफ़ैक्ट को इमेज में कॉपी करने की सुविधा देता है. हालांकि, बिल्ड नियम के हिस्से के तौर पर, टारगेट किए गए partition की जानकारी देकर, किसी खास partition में मॉड्यूल इंस्टॉल नहीं किया जा सकता. - Soong की सहायता.
custom_images
को Soong बिल्ड सिस्टम का इस्तेमाल करके, बिल्ड नहीं किया जा सकता. - ओटीए अपडेट से जुड़ी सहायता.
custom_images
का इस्तेमाल फ़ैक्ट्री ROM इमेज के तौर पर किया जाता है, जिन्हें ओटीए अपडेट नहीं मिल सकते.
पार्टीशन के बीच एबीआई (ऐप्लिकेशन बाइनरी इंटरफ़ेस) बनाए रखना
Android 9 में product
पार्टीशन,
system
पार्टीशन का एक्सटेंशन है. product
और system
के बीच कमजोर एबीआई है. इसलिए, दोनों को एक साथ अपग्रेड करना होगा. साथ ही, एबीआई सिस्टम SDK पर आधारित होना चाहिए. अगर सिस्टम SDK टूल, product
और system
के बीच के सभी एपीआई प्लैटफ़ॉर्म को कवर नहीं करता है, तो OEM को दोनों सेगमेंट के बीच अपने एबीआई को मैनेज करना होगा.
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_PRODUCT_PROPERTIES
को/product/build.prop
है. ये$(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 Verified Boot (AVB) को चालू करें. ठीक उसी तरह जैसे आपने vendor
और system
पार्टीशन के लिए किया है. एवीबी को चालू करने के लिए,
इन बिल्ड फ़्लैग को शामिल करें:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.