প্রোডাক্ট পার্টিশন

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
  • আপডেট করা যায় না; সাধারণত ফ্যাক্টরিতে একবার ফ্ল্যাশ করা হয়।
  • ব্র্যান্ডিং ও রঙের মতো ছোটখাটো পার্থক্যের ভিত্তিতে তৈরি। বিভিন্ন oem পার্টিশন কন্টেন্ট থাকার অর্থ এই নয় যে প্রোডাক্টের সফ্টওয়্যার আলাদা।
  • system পার্টিশনটি oem পার্টিশনের উপর নির্ভর করে না। (এটি oem পার্টিশন তখনই ব্যবহার করে যখন সেখানে কোনও নির্দিষ্ট ফাইল পাওয়া যায়)।
  • system পার্টিশনে শুধু পাবলিক API ব্যবহার করে।
product
  • আপডেট করা যায়
  • সিস্টেম ইমেজের সাথে যুক্ত (দুটি একসাথে আপডেট হয়)
  • প্রতিটি প্রোডাক্ট বা প্রোডাক্ট ফ্যামিলির জন্য তৈরি করা হয়েছে।
  • সিস্টেম পার্টিশন product পার্টিশনের উপর নির্ভর করতে পারে।
  • একই সাথে আপডেট করা হয় বলে নন-পাবলিক API ব্যবহার করতে পারে।
product (এনফোর্স করা ইন্টারফেস)
  • আপডেট করা যাবে
  • সিস্টেম ইমেজের সাথে ডিকাপল করা হয়েছে।
  • প্রতিটি প্রোডাক্ট বা প্রোডাক্ট ফ্যামিলি অনুযায়ী তৈরি করা হয়।
  • system পার্টিশনটি product পার্টিশনের উপর নির্ভর করে না।
  • লুকানো API ব্যবহার করা যাবে না, তবে শুধুমাত্র system পার্টিশনে পাবলিক ও সিস্টেম API ব্যবহার করা যাবে।

এইসব কারণে, 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_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 পার্টিশনে কোনও মডিউল ইনস্টল করতে নিম্নলিখিত বিল্ড ফ্ল্যাগ ব্যবহার করুন।

  • Android.bp-এ product_specific: true
  • Android.mk-এ LOCAL_PRODUCT_MODULE := true

যাচাই করা বুট চালু করুন

ক্ষতিকর সফ্টওয়্যার যাতে product পার্টিশনকে ট্যাম্পার করতে না পারে, তার জন্য সেই পার্টিশনের ক্ষেত্রে Android যাচাই করা বুট (AVB) চালু করুন (ঠিক যেমন আপনি vendor এবং system পার্টিশনের ক্ষেত্রে করেন)। AVB চালু করতে, নিম্নলিখিত বিল্ড ফ্ল্যাগ যোগ করুন: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.