Băm giao diện

Tài liệu này mô tả tính năng băm giao diện HIDL, một cơ chế để ngăn chặn những thay đổi ngoài ý muốn đối với giao diện và đảm bảo các thay đổi về giao diện được xem xét kỹ lưỡng. Cơ chế này là bắt buộc vì giao diện HIDL được tạo phiên bản, tức là sau khi phát hành giao diện, bạn không được thay đổi giao diện ngoại trừ trong cách bảo toàn giao diện nhị phân của ứng dụng (ABI) (chẳng hạn như ghi chú) sửa đổi).

Bố cục

Mọi thư mục gốc của gói (tức là ánh xạ android.hardware tới hardware/interfaces hoặc vendor.foo ánh xạ tới vendor/foo/hardware/interfaces) phải chứa current.txt liệt kê tất cả các tệp giao diện HIDL đã phát hành.

# 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

Lưu ý: Để giúp theo dõi những hàm băm nào từ đó, Google sẽ tách các tệp HIDL current.txt thành các tệp khác nhau phần: Phần đầu tiên được Phát hành trong Android 8; phần tiếp theo sẽ được phát hành trong Android 8 MR1. Bạn nên sử dụng bố cục tương tự trong tệp current.txt.

Hàm băm bằng hidl-gen

Bạn có thể thêm hàm băm vào tệp current.txt theo cách thủ công hoặc bằng cách đang sử dụng hidl-gen. Đoạn mã sau đây cung cấp ví dụ về các lệnh mà bạn có thể dùng với hidl-gen để quản lý Tệp current.txt (các hàm băm đã được rút ngắn):

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::types
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::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc
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
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc
f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallback
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 >> vendor/awesome/hardware/interfaces/current.txt

Cảnh báo: Đừng thay thế hàm băm cho một phát hành trước đó. Khi thay đổi một giao diện như vậy, hãy thêm hàm băm mới vào cuối tệp current.txt. Để biết thông tin chi tiết, hãy tham khảo Độ ổn định của ABI.

Mọi thư viện định nghĩa giao diện do hidl-gen tạo bao gồm các hàm băm có thể được truy xuất bằng cách gọi IBase::getHashChain. Khi hidl-gen biên dịch một giao diện này sẽ kiểm tra tệp current.txt trong thư mục gốc của gói HAL để xem HAL đã được thay đổi hay chưa:

  • Nếu không tìm thấy hàm băm cho HAL, giao diện sẽ được coi là chưa phát hành (trong phát triển) và thu thập dữ liệu.
  • Nếu tìm thấy hàm băm, hệ thống sẽ kiểm tra hàm này so với giao diện hiện tại:
    • Nếu giao diện khớp với hàm băm, thì quá trình biên dịch sẽ tiếp tục.
    • Nếu giao diện không khớp với hàm băm, thì quá trình biên dịch sẽ tạm dừng vì điều này có nghĩa là giao diện được phát hành trước đó đang bị thay đổi.
      • Để biết nội dung thay đổi cho khả năng duy trì ABI (xem Độ ổn định của ABI), tệp current.txt phải được sửa đổi trước khi quá trình biên dịch có thể tiếp tục.
      • Tất cả các thay đổi khác phải được thực hiện trong quá trình nâng cấp phiên bản nhỏ hoặc lớn của .

Độ ổn định của ABI

ABI bao gồm tệp nhị phân liên kết/quy ước gọi điện, v.v. Nếu ABI hoặc API thay đổi, thì giao diện sẽ không hoạt động lâu hơn với một system.img chung được biên dịch bằng giao diện chính thức.

Đảm bảo giao diện được tạo phiên bản và ABI ổn định rất quan trọng vì một số lý do:

  • Đảm bảo rằng quá trình triển khai của bạn có thể vượt qua Bộ thử nghiệm nhà cung cấp (VTS), giúp bạn đi đúng hướng để có thể thực hiện các OTA chỉ hỗ trợ khung.
  • Là OEM, giải pháp này cho phép bạn cung cấp Gói hỗ trợ bảng (BSP) dễ sử dụng và tuân thủ.
  • Bảng này giúp bạn theo dõi những giao diện có thể được phát hành. Cân nhắc current.txt bản đồ của một thư mục giao diện cho phép bạn xem lịch sử và trạng thái của tất cả giao diện được cung cấp trong một thư mục gốc của gói.

Khi thêm hàm băm mới cho một giao diện đã có mục nhập trong current.txt, hãy nhớ chỉ thêm các hàm băm đại diện cho các giao diện duy trì độ ổn định của ABI. Hãy xem xét các loại thay đổi sau:

Cho phép thay đổi
  • Thay đổi ghi chú (trừ phi thao tác này làm thay đổi ý nghĩa của một phương thức).
  • Thay đổi tên của một tham số.
  • Thay đổi tên của một tham số trả về.
  • Thay đổi chú thích.
Không được phép thay đổi
  • Sắp xếp lại các đối số, phương thức, v.v.
  • Đổi tên giao diện hoặc di chuyển giao diện đó sang một gói mới.
  • Đổi tên gói.
  • Thêm một trường phương thức/cấu trúc/v.v. ở bất kỳ đâu trong giao diện.
  • Bất cứ điều gì có thể phá vỡ bảng v C++.
  • v.v.