Android 9 ও তার পরের যেকোনও ভার্সনে Android বিল্ড সিস্টেম ব্যবহার করে
product পার্টিশন তৈরি করার সুবিধা অন্তর্ভুক্ত থাকে। আগে,
Android 8.x, SoC-নির্দিষ্ট কম্পোনেন্টকে system
পার্টিশন থেকে vendor পার্টিশনে আলাদা করার কাজ জোর করে করাতো।
এর জন্য Android বিল্ড সিস্টেম থেকে তৈরি OEM-নির্দিষ্ট কম্পোনেন্টের জন্য
কোনও জায়গা বরাদ্দ করা হত না। Android 9 ও তার পরবর্তী যেকোনও ভার্সনে অতিরিক্ত
অনুমতি
ও হোয়াইটলিস্টিং ফিচার প্রদান করা হয় যা বিভিন্ন পার্টিশনে priv-অ্যাপের ক্ষেত্রে প্রযোজ্য হয়।
প্রোডাক্ট পার্টিশন সম্পর্কে
অনেক OEM, তাদের নিজস্ব ফিচার প্রয়োগ করার জন্য AOSP সিস্টেম ইমেজ কাস্টমাইজ করে,
পাশাপাশি পরিষেবা প্রদানকারীর প্রয়োজনীয়তাও পূরণ করে। তবে, এই ধরনের কাস্টমাইজেশনের ফলে একাধিক সফ্টওয়্যার SKU-এর জন্য
একটি সিস্টেম ইমেজ ব্যবহার করা অসম্ভব হয়ে পড়ে। কাস্টমাইজেশনের জন্য প্রতিটি
ছবি আলাদা হতে হবে, যেমন আলাদা
লোকাল বা পরিষেবা প্রদানকারী। কাস্টমাইজেশন
সংরক্ষণ করার জন্য একটি আলাদা product পার্টিশন ব্যবহার করলে,
একাধিক সফ্টওয়্যার SKU-এর জন্য একটি একক সিস্টেম ইমেজ ব্যবহার করা সম্ভব হয়। (system পার্টিশন জেনেরিক কোড হোস্ট করে যা অনেক সফ্টওয়্যার SKU-এর মধ্যে
শেয়ার করা যেতে পারে)। vendor পার্টিশন SoC-নির্দিষ্ট BSP কোড হোস্ট করা চালিয়ে যায়
যা প্রদত্ত SoC-এর উপর ভিত্তি করে একাধিক
ডিভাইসের মধ্যে শেয়ার করা যেতে পারে।
আলাদা পার্টিশন ব্যবহার করার কিছু অসুবিধা আছে, যেমন
ডিস্ক স্পেস ম্যানেজ করা (ভবিষ্যতে
বৃদ্ধির জন্য সীমিত পরিমাণ স্পেস রিজার্ভ করে রাখতে হবে) এবং পার্টিশনগুলির মধ্যে একটি স্থিতিশীল অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) বজায় রাখা। product পার্টিশন ব্যবহার করার সিদ্ধান্ত নেওয়ার
আগে, আপনার অনন্য AOSP প্রয়োগ এবং সম্ভাব্য প্রশমন কৌশল (যেমন, ওভার-দ্য-এয়ার
(OTA) আপডেট চলাকালীন ডিভাইসের পার্টিশন আবার করা, যা Google করে না, তবে কিছু OEM করে) বিবেচনা করার জন্য সময় নিন।
ডায়নামিক পার্টিশনিং হল
এর একটি ভালো সমাধান।
প্রোডাক্ট পার্টিশন ও অনুমতি
Android 9 ও তার পরবর্তী যেকোনও ভার্সনে, অনুমতিতে পরিবর্তন
এবং হোয়াইটলিস্ট করার প্রসেস আপনার `প্রোডাক্ট` পার্টিশনে
কীভাবে priv-apps অনুমতি দেন তার উপর প্রভাব ফেলে। permissions.xml ফাইলটি
অবশ্যই priv-apps-এর মতো একই পার্টিশনে থাকতে হবে। প্রিভ-অ্যাপের জন্য
system পার্টিশনে
permissions.xml ফাইল প্লেস করলে, product
পার্টিশনে থাকা প্রিভ-অ্যাপের ক্ষেত্রে সেইসব অনুমতি বাড়ানো হয় না, যদিও প্রথমটি দ্বিতীয়টির এক্সটেনশন।
অনুমতি ও হোয়াইটলিস্টিং প্রসেস সম্পর্কে আরও জানতে, বিশেষ অনুমতি সংক্রান্ত হোয়াইটলিস্টিং দেখুন।
লিগ্যাসি /oem বনাম /product
প্রোডাক্ট
ইন্টারফেস এনফোর্সমেন্টের উপর নির্ভর করে product পার্টিশনের
দুটি অ্যাট্রিবিউট আছে। এছাড়াও, product পার্টিশনটি
পুরনো oem পার্টিশনের থেকে আলাদা:
| পার্টিশন | অ্যাট্রিবিউট |
|---|---|
oem |
|
product |
|
product (এনফোর্স করা ইন্টারফেস) |
|
এইসব কারণে, Android 9, product পার্টিশনকে সাপোর্ট করে, পাশাপাশি
পুরনো oem পার্টিশনকেও সাপোর্ট করে, কারণ কিছু ডিভাইস এটির উপর
নির্ভর করে। system পার্টিশন থেকে product পার্টিশনকে আলাদা করতে, Android 11 ভার্সন
product
ইন্টারফেস এনফোর্সমেন্ট সমর্থন করে।
/প্রোডাক্ট কম্পোনেন্ট
product পার্টিশনে নিম্নলিখিত কম্পোনেন্ট থাকে:
- প্রোডাক্ট-নির্দিষ্ট সিস্টেম প্রপার্টি (
/product/build.prop) - প্রোডাক্ট-নির্দিষ্ট RRO (
/product/overlay/*.apk) - প্রোডাক্ট-নির্দিষ্ট অ্যাপ (
/product/app/*.apk) - প্রোডাক্ট-নির্দিষ্ট priv-apps (
/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ছবি কপি করে আর্টিফ্যাক্ট যোগ করার সুবিধা দেয়, কিন্তু বিল্ড রুলের অংশ হিসেবে টার্গেট পার্টিশন নির্দিষ্ট করে কোনও মডিউল ইনস্টল করতে পারে না। - Soong সহায়তা। Soong বিল্ড সিস্টেম ব্যবহার করে
custom_imagesতৈরি করা যায় না। - OTA আপডেট সংক্রান্ত সহায়তা।
custom_imagesফ্যাক্টরি ROM হিসেবে ব্যবহার করা হয় যেসব ছবি OTA আপডেট পায় না।
পার্টিশনের মধ্যে ABI বজায় রাখা
Android 9-এ product পার্টিশন হল
system পার্টিশনের এক্সটেনশন।
product এবং system পার্টিশনের মধ্যে দুর্বল ABI আছে, তাই দুটিকেই একই সাথে
আপগ্রেড করতে হবে এবং ABI সিস্টেম SDK-ভিত্তিক হতে হবে। সিস্টেম SDK যদি product ও system-এর মধ্যে
সব API সারফেস কভার না করে, তাহলে OEM-কে অবশ্যই দুটি পার্টিশনের মধ্যে
নিজস্ব ABI বজায় রাখতে হবে।
product এবং system পার্টিশন একে অপরের উপর
নির্ভরশীল হতে পারে। তবে, product পার্টিশন ছাড়া
জেনেরিক সিস্টেম ইমেজ (GSI)
দিয়ে করা পরীক্ষা সঠিকভাবে কাজ করতে হবে।
product ইন্টারফেস প্রয়োগ করা হলে, product
পার্টিশনকে system পার্টিশন থেকে আলাদা করা হয়। product
পার্টিশন শুধুমাত্র system পার্টিশন থেকে অনুমোদিত ইন্টারফেস ব্যবহার করে।
product পার্টিশনের সাথে vendor পার্টিশনের কোনও নির্ভরতা থাকলে চলবে না।
product এবং vendor পার্টিশনের মধ্যে সরাসরি ইন্টার্যাকশন
নিষিদ্ধ।
(এটি SEpolicy দ্বারা এনফোর্স করা হয়।)
প্রোডাক্ট পার্টিশন প্রয়োগ করা
নতুন প্রোডাক্ট পার্টিশন প্রয়োগ করার আগে, AOSP-তে
প্রোডাক্ট পার্টিশন সংক্রান্ত
পরিবর্তন পর্যালোচনা করুন। তারপরে, product সেট-আপ করতে,
নিচের বোর্ড বা প্রোডাক্ট-বিল্ড ফ্ল্যাগ যোগ করুন:
BOARD_USES_PRODUCTIMAGEBOARD_PRODUCTIMAGE_PARTITION_SIZEBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE/product/build.prop-এর জন্যPRODUCT_PRODUCT_PROPERTIES। এগুলি অবশ্যই$(call inherit-product path/to/device.mk)-এর মধ্যে থাকতে হবে, যেমনPRODUCT_PRODUCT_PROPERTIES += product.abc=ok-এ দেখানো হয়েছে।
প্রোডাক্ট পার্টিশনে মডিউল ইনস্টল করুন
product পার্টিশনে কোনও মডিউল ইনস্টল করতে নিম্নলিখিত বিল্ড ফ্ল্যাগ ব্যবহার করুন।
Android.bp-এproduct_specific: trueAndroid.mk-এLOCAL_PRODUCT_MODULE := true
যাচাই করা বুট চালু করুন
ক্ষতিকর সফ্টওয়্যার যাতে product পার্টিশনকে ট্যাম্পার করতে না পারে, তার জন্য সেই পার্টিশনের ক্ষেত্রে
Android
যাচাই করা বুট (AVB) চালু করুন (ঠিক যেমন আপনি vendor এবং system পার্টিশনের ক্ষেত্রে করেন)। AVB চালু করতে,
নিম্নলিখিত বিল্ড ফ্ল্যাগ যোগ করুন:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.