এই দস্তাবেজটি HIDL ইন্টারফেস হ্যাশিং বর্ণনা করে, দুর্ঘটনাজনিত ইন্টারফেস পরিবর্তনগুলি প্রতিরোধ করার এবং ইন্টারফেস পরিবর্তনগুলি পুঙ্খানুপুঙ্খভাবে যাচাই করা নিশ্চিত করার একটি পদ্ধতি। এই প্রক্রিয়াটি প্রয়োজন কারণ এইচআইডিএল ইন্টারফেসগুলি সংস্করণ করা হয়েছে, যার অর্থ হল একটি ইন্টারফেস প্রকাশের পরে এটি একটি অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (এবিআই) সংরক্ষণ পদ্ধতি (যেমন মন্তব্য সংশোধন) ছাড়া পরিবর্তন করা উচিত নয়।
লেআউট
প্রতিটি প্যাকেজ রুট ডিরেক্টরি (যেমন android.hardware
ম্যাপিং to hardware/interfaces
অথবা vendor.foo
ম্যাপিং to vendor/foo/hardware/interfaces
) একটি current.txt
ফাইল থাকতে হবে যা সমস্ত প্রকাশিত HIDL ইন্টারফেস ফাইলের তালিকা করে।
# current.txt files support comments starting with a '#' character # this file, for instance, would be vendor/foo/hardware/interfaces/current.txt # Each line has a SHA-256 hash followed by the name of an interface. # They have been shortened in this doc for brevity but they are # 64 characters in length in an actual current.txt file. d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here # types.hal files are also noted in current.txt files c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types # Multiple hashes can be in the file for the same interface. This can be used # to note how ABI sustaining changes were made to the interface. # For instance, here is another hash for IFoo: # Fixes type where "FooCallback" was misspelled in comment on "FooStruct" 822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
দ্রষ্টব্য: কোন হ্যাশগুলি কোথা থেকে এসেছে তা ট্র্যাক রাখতে সাহায্য করার জন্য, Google HIDL current.txt
ফাইলগুলিকে বিভিন্ন বিভাগে বিভক্ত করে: প্রথম বিভাগটি Android 8 এ প্রকাশিত হয়েছে ; পরবর্তী বিভাগটি Android 8 MR1 এ প্রকাশিত হবে। আমরা দৃঢ়ভাবে আপনার current.txt
ফাইলে অনুরূপ লেআউট ব্যবহার করার পরামর্শ দিই।
হাইডল-জেনের সাথে হ্যাশ
আপনি ম্যানুয়ালি বা hidl-gen
ব্যবহার করে একটি current.txt
ফাইলে একটি হ্যাশ যোগ করতে পারেন। নিম্নলিখিত কোড স্নিপেট কমান্ডের উদাহরণ প্রদান করে যা আপনি একটি current.txt
ফাইল পরিচালনা করতে hidl-gen
ব্যবহার করতে পারেন (হ্যাশগুলি সংক্ষিপ্ত করা হয়েছে):
hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::typeshidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfchidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types 07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallbackhidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 >> vendor/awesome/hardware/interfaces/current.txt
সতর্কতা: পূর্বে প্রকাশিত ইন্টারফেসের জন্য হ্যাশ প্রতিস্থাপন করবেন না। এই ধরনের একটি ইন্টারফেস পরিবর্তন করার সময়, current.txt
ফাইলের শেষে একটি নতুন হ্যাশ যোগ করুন। বিস্তারিত জানার জন্য, ABI স্থিতিশীলতা পড়ুন।
hidl-gen
দ্বারা উত্পন্ন প্রতিটি ইন্টারফেস সংজ্ঞা লাইব্রেরিতে হ্যাশ রয়েছে, যা IBase::getHashChain
কল করে পুনরুদ্ধার করা যেতে পারে। যখন hidl-gen
একটি ইন্টারফেস কম্পাইল করে, তখন এটি HAL প্যাকেজের রুট ডিরেক্টরিতে current.txt
ফাইলটি পরীক্ষা করে দেখতে পারে যে HAL পরিবর্তন করা হয়েছে কিনা:
- যদি HAL-এর জন্য কোনো হ্যাশ না পাওয়া যায়, তাহলে ইন্টারফেসটিকে অপ্রকাশিত (উন্নয়নে) বিবেচনা করা হয় এবং সংকলন এগিয়ে যায়।
- যদি হ্যাশগুলি পাওয়া যায়, তবে সেগুলি বর্তমান ইন্টারফেসের বিরুদ্ধে পরীক্ষা করা হয়:
- যদি ইন্টারফেস হ্যাশের সাথে মেলে তবে সংকলন এগিয়ে যায়।
- যদি ইন্টারফেসটি হ্যাশের সাথে মেলে না, তবে সংকলন বন্ধ করা হয় কারণ এর অর্থ হল একটি পূর্বে প্রকাশিত ইন্টারফেস পরিবর্তন করা হচ্ছে।
- ABI-সংরক্ষিত পরিবর্তনের জন্য ( ABI স্থিতিশীলতা দেখুন), সংকলন এগিয়ে যাওয়ার আগে
current.txt
ফাইলটি অবশ্যই পরিবর্তন করতে হবে। - অন্যান্য সমস্ত পরিবর্তন ইন্টারফেসের একটি ছোট বা বড় সংস্করণ আপগ্রেডে করা উচিত।
- ABI-সংরক্ষিত পরিবর্তনের জন্য ( ABI স্থিতিশীলতা দেখুন), সংকলন এগিয়ে যাওয়ার আগে
ABI স্থিতিশীলতা
একটি ABI বাইনারি লিঙ্কেজ/কলিং কনভেনশন/ইত্যাদি অন্তর্ভুক্ত করে। ABI বা API পরিবর্তিত হলে, ইন্টারফেসটি আর একটি জেনেরিক system.img
এর সাথে কাজ করে না যা অফিসিয়াল ইন্টারফেসের সাথে কম্পাইল করা হয়েছিল।
ইন্টারফেসগুলি সংস্করণ করা হয়েছে এবং ABI স্থিতিশীল তা নিশ্চিত করা বেশ কয়েকটি কারণে গুরুত্বপূর্ণ :
- এটি নিশ্চিত করে যে আপনার বাস্তবায়ন ভেন্ডর টেস্ট স্যুট (VTS) পাস করতে পারে, যা আপনাকে ফ্রেমওয়ার্ক-কেবল ওটিএ করতে সক্ষম হওয়ার ট্র্যাকে রাখে।
- একটি OEM হিসাবে, এটি আপনাকে একটি বোর্ড সাপোর্ট প্যাকেজ (BSP) প্রদান করতে সক্ষম করে যা ব্যবহার করা সহজ এবং অনুগত।
- এটি আপনাকে কী ইন্টারফেস প্রকাশ করা যেতে পারে তার ট্র্যাক রাখতে সহায়তা করে। একটি ইন্টারফেস ডিরেক্টরির একটি মানচিত্র
current.txt
বিবেচনা করুন যা আপনাকে প্যাকেজ রুটে দেওয়া সমস্ত ইন্টারফেসের ইতিহাস এবং অবস্থা দেখতে দেয়।
একটি ইন্টারফেসের জন্য একটি নতুন হ্যাশ যোগ করার সময় যেখানে ইতিমধ্যেই current.txt
এ একটি এন্ট্রি রয়েছে, শুধুমাত্র সেই হ্যাশগুলি যোগ করতে ভুলবেন না যা ইন্টারফেসের প্রতিনিধিত্ব করে যা ABI স্থিতিশীলতা বজায় রাখে। নিম্নলিখিত ধরনের পরিবর্তন পর্যালোচনা করুন:
পরিবর্তন অনুমোদিত |
|
---|---|
পরিবর্তন অনুমোদিত নয় |
|