Android 7.0 ভার্সনে নেটিভ লাইব্রেরির জন্য নেমস্পেস চালু করা হয়েছে, এর ফলে ইন্টার্নাল API ভিজিবিলিটি সীমিত করা যায় এবং সেইসব পরিস্থিতি সমাধান করা যায় যেখানে অ্যাপ ভুলবশত নিজেদের লাইব্রেরির পরিবর্তে প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করে। অ্যাপ-নির্দিষ্ট পরিবর্তনের জন্য Android ডেভেলপারদের ব্লগ পোস্ট Android 7.0-এ ব্যক্তিগত C/C++ প্রতীক বিধিনিষেধের সাথে স্থিতিশীলতা উন্নত করা দেখুন।
স্থাপত্যশিল্প
Android 7.0 ও তার পরবর্তী যেকোনও ভার্সনে, সিস্টেম লাইব্রেরি অ্যাপ লাইব্রেরি থেকে আলাদা করা হয়।
ছবি ১. নেটিভ লাইব্রেরির জন্য নেমস্পেস।
নেটিভ লাইব্রেরির নেমস্পেস, অ্যাপকে প্রাইভেট-প্ল্যাটফর্ম নেটিভ
API (যেমন OpenSSL-এর ক্ষেত্রে করা হয়েছে) ব্যবহার করা থেকে আটকায়। এছাড়াও, এটি এমন পরিস্থিতি দূর করে যেখানে অ্যাপগুলি
অনিচ্ছাকৃতভাবে নিজেদের লাইব্রেরির পরিবর্তে প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করে (যেমন libpng-এর ক্ষেত্রে দেখা গেছে
)। অ্যাপ লাইব্রেরির পক্ষে অনিচ্ছাকৃতভাবে ইন্টার্নাল
সিস্টেম লাইব্রেরি ব্যবহার করা কঠিন (এবং এর বিপরীত)।
অতিরিক্ত নেটিভ লাইব্রেরি যোগ করুন
স্ট্যান্ডার্ড পাবলিক নেটিভ লাইব্রেরি ছাড়াও, সিলিকন ভেন্ডর (Android 7.0 থেকে শুরু) এবং ডিভাইস প্রস্তুতকারক (Android 9 থেকে শুরু) অতিরিক্ত নেটিভ লাইব্রেরি প্রদান করার বিকল্প বেছে নিতে পারে। এগুলি সংশ্লিষ্ট লাইব্রেরি ফোল্ডারে রেখে এবং .txt ফাইলে স্পষ্টভাবে তালিকাভুক্ত করে অ্যাপের অ্যাক্সেসযোগ্য করে তোলা হয়।
লাইব্রেরি ফোল্ডারগুলি হল:
/vendor/lib(৩২-বিট ভার্সনের জন্য) এবং/vendor/lib64(৬৪-বিট ভার্সনের জন্য) সিলিকন ভেন্ডরদের থেকে পাওয়া লাইব্রেরির জন্য- ডিভাইস প্রস্তুতকারকের থেকে লাইব্রেরির জন্য
/system/lib(32-বিটের জন্য) এবং/system/lib64(64-বিটের জন্য)
.txt ফাইলগুলি হল:
/vendor/etc/public.libraries.txtসিলিকন ভেন্ডরদের থেকে পাওয়া লাইব্রেরির জন্য/system/etc/public.libraries-COMPANYNAME.txtডিভাইস প্রস্তুতকারকের লাইব্রেরির জন্য, যেখানেCOMPANYNAMEপ্রস্তুতকারকের নাম বোঝায় (যেমনawesome.company)।COMPANYNAME-এর সাথে[A-Za-z0-9_.-]+-এর মিল থাকতে হবে; বর্ণসাংখ্যিক অক্ষর, _, . (ডট) এবং -। কোনও ডিভাইসে একাধিক .txt ফাইল থাকতে পারে, যদি কিছু লাইব্রেরি এক্সটার্নাল সলিউশন প্রোভাইডারদের থেকে নেওয়া হয়।
ডিভাইস প্রস্তুতকারকদের দ্বারা পাবলিক করা system পার্টিশনের নেটিভ লাইব্রেরি
অবশ্যই lib*COMPANYNAME.so নামে হতে হবে, যেমন, libFoo.awesome.company.so।
অন্যভাবে বলতে গেলে, libFoo.so কোম্পানির নামের শেষে না থাকলে তা সর্বজনীন করা যাবে না।
লাইব্রেরি ফাইলের নামে থাকা COMPANYNAME-এর সাথে লাইব্রেরির নাম যে
txt ফাইলের নামে তালিকাভুক্ত করা আছে, সেটির COMPANYNAME-এর হুবহু মিল থাকতে হবে।
AOSP-এর অংশ হিসেবে থাকা নেটিভ লাইব্রেরি সর্বজনীন করা যাবে না (স্ট্যান্ডার্ড সর্বজনীন নেটিভ লাইব্রেরি ছাড়া, যা ডিফল্ট হিসেবে সর্বজনীন)। শুধুমাত্র সিলিকন ভেন্ডর বা ডিভাইস প্রস্তুতকারকের দ্বারা যোগ করা অতিরিক্ত লাইব্রেরি অ্যাপের জন্য অ্যাক্সেসযোগ্য করে তোলা যাবে।
Android 8.0 থেকে শুরু করে, ভেন্ডর পাবলিক লাইব্রেরিতে নিম্নলিখিত অতিরিক্ত বিধিনিষেধ এবং প্রয়োজনীয় সেট-আপ আছে:
- ভেন্ডরের নেটিভ লাইব্রেরি সঠিকভাবে লেবেল করা থাকতে হবে যাতে এটি
অ্যাপের জন্য অ্যাক্সেসযোগ্য হয়। কোনও অ্যাপের (থার্ড-পার্টি অ্যাপ সহ) অ্যাক্সেস প্রয়োজন হলে, ভেন্ডর-নির্দিষ্ট
same_process_hal_filefile_contextsফাইলে লাইব্রেরিকে নিম্নলিখিতভাবে লেবেল করতে হবে: যেখানে/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
libnative.soহল নেটিভ লাইব্রেরির নাম। - লাইব্রেরি, সরাসরি বা এর ডিপেন্ডেন্সির মাধ্যমে ট্রানজিটিভভাবে, VNDK-SP এবং LLNDK লাইব্রেরি ছাড়া অন্য কোনও সিস্টেম লাইব্রেরির উপর
নির্ভরশীল হতে পারবে না।
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv-এ VNDK-SP ও LLNDK লাইব্রেরির তালিকা দেখুন।
Android 15 থেকে, ভেন্ডর পাবলিক লাইব্রেরি
ভেন্ডর APEX-এ রাখা যেতে পারে। কোনও ভেন্ডর APEX-এ প্যাকেজ করা হলে, APEX ম্যানিফেস্টে provideNativeLibs প্রপার্টিতে লাইব্রেরিগুলি
তালিকাভুক্ত করুন।
অ্যাপ আপডেট করুন যাতে সর্বজনীন নয় এমন নেটিভ লাইব্রেরি ব্যবহার না করা হয়
এই ফিচারটি শুধুমাত্র SDK ভার্সন ২৪ বা তার পরের ভার্সন টার্গেট করা অ্যাপের জন্য চালু করা হয়েছে; ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য, সারণী ১ দেখুন। আপনার অ্যাপ যদি প্রাইভেট নেটিভ লাইব্রেরির বিরুদ্ধে লিঙ্ক করে, তাহলে কী আশা করা যায়। অ্যাপ অ্যাক্সেস করতে পারে এমন Android নেটিভ লাইব্রেরির তালিকা (এছাড়াও পাবলিক নেটিভ লাইব্রেরি হিসেবে পরিচিত) CDD-এর ৩.১.১ বিভাগে তালিকাভুক্ত করা আছে। ২৪ বা এর পরের ভার্সনকে টার্গেট করে এবং কোনও নন-পাবলিক লাইব্রেরি ব্যবহার করে এমন অ্যাপ আপডেট করতে হবে। আরও বিবরণের জন্য NDK অ্যাপ প্ল্যাটফর্ম লাইব্রেরির সাথে লিঙ্ক করা দেখুন।
নেটিভ লাইব্রেরি ডিপেন্ডেন্সির জন্য অ্যাপ আপডেট করা
যেসব অ্যাপ SDK ভার্সন 31 (Android 12) বা এর পরের যেকোনও ভার্সনকে টার্গেট করে, সেগুলিকে অ্যাপ ম্যানিফেস্টে
<uses-native-library> ট্যাগ ব্যবহার করে তাদের নেটিভ শেয়ার করা লাইব্রেরি নির্ভরতা
স্পষ্টভাবে উল্লেখ করতে হবে। অনুরোধ করা
লাইব্রেরির কোনও অংশ ডিভাইসে না থাকলে, অ্যাপ ইনস্টল করা হয় না। অ্যাপ ইনস্টল করা হলে, সেগুলিকে
শুধুমাত্র তাদের অনুরোধ করা নেটিভ শেয়ার্ড লাইব্রেরি প্রদান করা হয়। এর অর্থ হল,
অ্যাপ ম্যানিফেস্টে নেই এমন নেটিভ শেয়ার করা লাইব্রেরি অ্যাপ অ্যাক্সেস করতে পারবে না।