این سند هش رابط HIDL را توصیف می کند، مکانیزمی برای جلوگیری از تغییرات تصادفی رابط و اطمینان از بررسی کامل تغییرات رابط. این مکانیسم مورد نیاز است زیرا رابطهای HIDL نسخهبندی شدهاند، به این معنی که پس از انتشار یک رابط، نباید آن را تغییر داد، مگر در یک رابط باینری برنامه (ABI) با حفظ شیوهای (مانند اصلاح نظر).
طرح بندی
هر دایرکتوری ریشه بسته (یعنی نگاشت android.hardware
به hardware/interfaces
یا نگاشت vendor.foo
به 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 منتشر شده است. بخش بعدی در اندروید 8 MR1 منتشر خواهد شد. ما قویاً توصیه می کنیم از طرح بندی مشابهی در فایل current.txt
خود استفاده کنید.
هش با hidl-gen
می توانید به صورت دستی یا با استفاده از hidl-gen
یک هش به فایل current.txt
اضافه کنید. قطعه کد زیر نمونههایی از دستوراتی را ارائه میکند که میتوانید با hidl-gen
برای مدیریت فایل current.txt
استفاده کنید (هشها کوتاه شدهاند):
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
در حال کامپایل کردن یک رابط است، فایل current.txt
را در دایرکتوری ریشه بسته HAL بررسی می کند تا ببیند آیا HAL تغییر کرده است یا خیر:
- اگر هش برای HAL پیدا نشد، رابط منتشر نشده (در حال توسعه) در نظر گرفته می شود و کامپایل ادامه می یابد.
- اگر هش پیدا شود، با رابط فعلی بررسی می شود:
- اگر رابط با هش مطابقت داشته باشد، کامپایل ادامه می یابد.
- اگر اینترفیس با هش مطابقت نداشته باشد، کامپایل متوقف می شود، زیرا این بدان معناست که رابطی که قبلا منتشر شده تغییر می کند.
- برای تغییر حفظ ABI (به ثبات ABI مراجعه کنید)، فایل
current.txt
باید قبل از ادامه کامپایل اصلاح شود. - تمام تغییرات دیگر باید در یک نسخه جزئی یا اصلی ارتقاء رابط ایجاد شود.
- برای تغییر حفظ ABI (به ثبات ABI مراجعه کنید)، فایل
پایداری ABI
یک ABI شامل پیوندهای باینری / قراردادهای فراخوانی / و غیره است. اگر ABI یا API تغییر کند، رابط دیگر با یک system.img
عمومی که با رابط های رسمی کامپایل شده است کار نمی کند.
اطمینان از اینکه اینترفیس ها نسخه بندی شده و ABI پایدار هستند به چند دلیل بسیار مهم است:
- این تضمین میکند که پیادهسازی شما میتواند مجموعه تست فروشنده (VTS) را پشت سر بگذارد، که شما را در مسیری قرار میدهد که بتوانید OTAهای فقط چارچوبی را انجام دهید.
- به عنوان یک OEM، به شما این امکان را می دهد که یک بسته پشتیبانی هیئت مدیره (BSP) ارائه دهید که استفاده از آن ساده و سازگار است.
- این به شما کمک می کند تا ببینید چه رابط هایی می توانند منتشر شوند.
current.txt
را نقشه ای از دایرکتوری واسط ها در نظر بگیرید که به شما امکان می دهد تاریخچه و وضعیت همه اینترفیس های ارائه شده در ریشه بسته را ببینید.
هنگام افزودن هش جدید برای رابطی که از قبل دارای ورودی در current.txt
است، مطمئن شوید که فقط هش هایی را اضافه کنید که نمایانگر رابط هایی هستند که پایداری ABI را حفظ می کنند. انواع تغییرات زیر را مرور کنید:
تغییرات مجاز است |
|
---|---|
تغییرات مجاز نیست |
|