নেটিভ লাইব্রেরির জন্য নামস্থান

অ্যান্ড্রয়েড 7.0 অভ্যন্তরীণ API দৃশ্যমানতা সীমাবদ্ধ করার জন্য নেটিভ লাইব্রেরিগুলির জন্য নামস্থান চালু করেছে এবং এমন পরিস্থিতিতে সমাধান করেছে যেখানে অ্যাপগুলি দুর্ঘটনাক্রমে তাদের নিজস্ব পরিবর্তে প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করে। অ্যাপ্লিকেশান-নির্দিষ্ট পরিবর্তনের জন্য Android 7.0 Android বিকাশকারীদের ব্লগ পোস্টে ব্যক্তিগত C/C++ প্রতীক সীমাবদ্ধতার সাথে স্থিতিশীলতার উন্নতি দেখুন।

স্থাপত্য

অ্যান্ড্রয়েড 7.0 এবং উচ্চতর সংস্করণে, সিস্টেম লাইব্রেরিগুলি অ্যাপ লাইব্রেরি থেকে আলাদা করা হয়।

নেটিভ লাইব্রেরির জন্য নামস্থান

চিত্র 1. নেটিভ লাইব্রেরির জন্য নামস্থান

নেটিভ লাইব্রেরির নেমস্পেস অ্যাপগুলিকে প্রাইভেট-প্ল্যাটফর্ম নেটিভ এপিআই ব্যবহার করতে বাধা দেয় (যেমনটি OpenSSL-এর সাথে করা হয়েছিল)। এটি এমন পরিস্থিতিগুলিও সরিয়ে দেয় যেখানে অ্যাপগুলি দুর্ঘটনাক্রমে তাদের নিজস্ব পরিবর্তে প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করে (যেমন libpng এর সাথে দেখা হয়েছে)। অ্যাপ লাইব্রেরিগুলির জন্য দুর্ঘটনাক্রমে অভ্যন্তরীণ সিস্টেম লাইব্রেরিগুলি ব্যবহার করা কঠিন (এবং তদ্বিপরীত)।

অতিরিক্ত নেটিভ লাইব্রেরি যোগ করা হচ্ছে

স্ট্যান্ডার্ড পাবলিক নেটিভ লাইব্রেরি ছাড়াও, সিলিকন বিক্রেতারা (Android 7.0 থেকে শুরু করে) এবং ডিভাইস নির্মাতারা (Android 9 থেকে শুরু করে) সংশ্লিষ্ট লাইব্রেরি ফোল্ডারের অধীনে রেখে এবং স্পষ্টভাবে .txt-এ তালিকাভুক্ত করে অ্যাপগুলিতে অ্যাক্সেসযোগ্য অতিরিক্ত নেটিভ লাইব্রেরিগুলি প্রদান করতে বেছে নিতে পারে। নথি পত্র.

লাইব্রেরি ফোল্ডারগুলি হল:

  • সিলিকন বিক্রেতাদের লাইব্রেরির জন্য /vendor/lib (32-বিটের জন্য) এবং /vendor/lib64 (64-বিটের জন্য)
  • ডিভাইস নির্মাতাদের লাইব্রেরির জন্য /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-এর অংশ এমন নেটিভ লাইব্রেরিগুলিকে অবশ্যই সর্বজনীন করা উচিত নয় (স্ট্যান্ডার্ড পাবলিক নেটিভ লাইব্রেরিগুলি ছাড়া যা ডিফল্টরূপে সর্বজনীন)। শুধুমাত্র সিলিকন বিক্রেতা বা ডিভাইস নির্মাতাদের দ্বারা যোগ করা অতিরিক্ত লাইব্রেরিগুলিকে অ্যাপগুলিতে অ্যাক্সেসযোগ্য করা যেতে পারে৷

অ্যান্ড্রয়েড 8.0 থেকে শুরু করে, বিক্রেতা পাবলিক লাইব্রেরিতে নিম্নলিখিত অতিরিক্ত বিধিনিষেধ এবং প্রয়োজনীয় সেটআপ রয়েছে:

  1. বিক্রেতার নেটিভ লাইব্রেরিটি অবশ্যই সঠিকভাবে লেবেলযুক্ত হতে হবে যাতে এটি অ্যাপগুলিতে অ্যাক্সেসযোগ্য হতে পারে। যদি কোনো অ্যাপের (তৃতীয় পক্ষের অ্যাপস সহ) অ্যাক্সেসের প্রয়োজন হয়, তাহলে লাইব্রেরিটিকে অবশ্যই একটি বিক্রেতা-নির্দিষ্ট file_contexts ফাইলে same_process_hal_file হিসাবে লেবেল করতে হবে:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    যেখানে libnative.so হল নেটিভ লাইব্রেরির নাম।
  2. লাইব্রেরি, সরাসরি বা ট্রানজিটিভভাবে তার নির্ভরতার মাধ্যমে, VNDK-SP এবং LLNDK লাইব্রেরি ছাড়া অন্য সিস্টেম লাইব্রেরির উপর নির্ভর করবে না। development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv এ VNDK-SP এবং LLNDK লাইব্রেরির তালিকা খুঁজুন।

অ-পাবলিক নেটিভ লাইব্রেরি ব্যবহার না করার জন্য অ্যাপ আপডেট করা হচ্ছে

এই বৈশিষ্ট্যটি শুধুমাত্র SDK সংস্করণ 24 বা তার পরে লক্ষ্য করা অ্যাপ্লিকেশনগুলির জন্য সক্রিয় করা হয়েছে; পশ্চাৎপদ সামঞ্জস্যের জন্য, সারণী 1 দেখুন। আপনার অ্যাপটি যদি ব্যক্তিগত নেটিভ লাইব্রেরির সাথে লিঙ্ক করা হয় তাহলে কী আশা করা যায় । অ্যাপ্লিকেশানগুলিতে অ্যাক্সেসযোগ্য অ্যান্ড্রয়েড নেটিভ লাইব্রেরিগুলির তালিকা (সর্বজনীন নেটিভ লাইব্রেরি হিসাবেও পরিচিত) CDD বিভাগ 3.1.1 এ তালিকাভুক্ত করা হয়েছে৷ 24 বা তার পরে টার্গেট করা এবং যে কোনও অ-পাবলিক লাইব্রেরি ব্যবহার করা অ্যাপগুলি আপডেট করা উচিত। আরও বিশদ বিবরণের জন্য প্ল্যাটফর্ম লাইব্রেরির সাথে লিঙ্ক করা NDK অ্যাপস দেখুন।

তাদের নেটিভ লাইব্রেরি নির্ভরতার জন্য অ্যাপ আপডেট করা হচ্ছে

যে অ্যাপ্লিকেশানগুলি SDK সংস্করণ 31 (Android 12) বা উচ্চতরকে লক্ষ্য করে তাদের অবশ্যই অ্যাপ ম্যানিফেস্টে <uses-native-library> ট্যাগ ব্যবহার করে তাদের নেটিভ শেয়ার করা লাইব্রেরি নির্ভরতা স্পষ্টভাবে উল্লেখ করতে হবে। অনুরোধ করা লাইব্রেরির কোনো অংশ ডিভাইসে বিদ্যমান না থাকলে, অ্যাপটি ইনস্টল করা হয় না। যখন অ্যাপগুলি ইনস্টল করা হয়, তখন তাদের শুধুমাত্র নেটিভ শেয়ার করা লাইব্রেরিগুলি দেওয়া হয় যা তারা অনুরোধ করেছে। এর মানে হল যে অ্যাপগুলি নেটিভ শেয়ার করা লাইব্রেরিগুলি অ্যাক্সেস করতে পারে না যা অ্যাপ ম্যানিফেস্টে প্রদর্শিত হয় না৷