Phần mở rộng VNDK

Các nhà sản xuất thiết bị Android thay đổi mã nguồn của thư viện AOSP vì nhiều lý do. Một số nhà cung cấp triển khai lại các chức năng trong thư viện AOSP để tăng hiệu suất trong khi các nhà cung cấp khác thêm hook mới, API mới hoặc chức năng mới vào thư viện AOSP. Phần này cung cấp hướng dẫn mở rộng thư viện AOSP theo cách không làm hỏng CTS/VTS.

Thay thế thả

Tất cả các thư viện chia sẻ đã sửa đổi phải là các thư viện thay thế có thể thay thế , tương thích nhị phân với đối tác AOSP của chúng. Tất cả người dùng AOSP hiện tại phải có khả năng sử dụng thư viện dùng chung đã sửa đổi mà không cần biên dịch lại. Yêu cầu này bao hàm những điều sau đây:

  • Không được loại bỏ các chức năng AOSP.
  • Cấu trúc không được thay đổi nếu cấu trúc đó được tiếp xúc với người dùng.
  • Điều kiện trước của các chức năng không được tăng cường.
  • Các chức năng phải cung cấp các chức năng tương đương.
  • Hậu điều kiện của các chức năng không được bị suy yếu.

Phân loại mô-đun mở rộng

Phân loại các mô-đun theo chức năng mà chúng xác địnhsử dụng .

Lưu ý : Chức năng được sử dụng ở đây thay vì API/ABI vì có thể thêm chức năng mà không cần thay đổi bất kỳ API/ABI nào.

Tùy thuộc vào các chức năng được xác định trong một mô-đun, các mô-đun có thể được phân loại thành DA-ModuleDX-Module :

  • Mô-đun AOSP chỉ xác định (DA-Module) không xác định các chức năng mới không có trong bản sao AOSP.
    • Ví dụ 1. Thư viện AOSP nguyên vẹn chưa sửa đổi là Mô-đun DA.
    • Ví dụ 2. Nếu nhà cung cấp viết lại các chức năng trong libcrypto.so bằng hướng dẫn SIMD (không thêm chức năng mới), thì libcrypto.so được sửa đổi sẽ là Mô-đun DA.
  • Mô-đun mở rộng xác định (Mô-đun DX) xác định các chức năng mới hoặc không có bản sao AOSP.
    • Ví dụ 1. Nếu nhà cung cấp thêm chức năng trợ giúp vào libjpeg.so để truy cập một số dữ liệu nội bộ thì libjpeg.so đã sửa đổi sẽ là DX-Lib và chức năng mới được thêm vào sẽ là phần mở rộng của thư viện.
    • Ví dụ 2. Nếu nhà cung cấp xác định thư viện không phải AOSP có tên libfoo.so thì libfoo.so sẽ là DX-Lib.

Tùy thuộc vào chức năng mà mô-đun sử dụng, các mô-đun có thể được phân loại thành UA-ModuleUX-Module .

  • Mô-đun chỉ sử dụng AOSP (UA-Module) chỉ sử dụng các chức năng AOSP trong quá trình triển khai của chúng. Họ không dựa vào bất kỳ tiện ích mở rộng không phải AOSP nào.
    • Ví dụ 1. Thư viện AOSP nguyên vẹn chưa sửa đổi là Mô-đun UA.
    • Ví dụ 2. Nếu thư viện chia sẻ đã sửa đổi libjpeg.so chỉ dựa trên các API AOSP khác thì đó sẽ là Mô-đun UA.
  • Sử dụng Mô-đun mở rộng (UX-Module) dựa vào một số chức năng không phải AOSP trong quá trình triển khai.
    • Ví dụ 1. Nếu libjpeg.so đã sửa đổi dựa trên một thư viện không phải AOSP khác có tên libjpeg_turbo2.so thì libjpeg.so đã sửa đổi sẽ là Mô-đun UX.
    • Ví dụ 2. Nếu một nhà cung cấp thêm một chức năng mới vào libexif.so đã sửa đổi của họ và libjpeg.so đã sửa đổi của họ sử dụng chức năng mới được thêm từ libexif.so thì libjpeg.so đã sửa đổi của họ sẽ là Mô-đun UX.

Các định nghĩa và cách sử dụng độc lập với nhau:

Các chức năng đã sử dụng
Chỉ AOSP (UA) Mở rộng (UX)
Chức năng được xác định Chỉ AOSP (DA) daua DAUX
Mở rộng (DX) DXUA DXUX

Cơ chế gia hạn VNĐK

Mô-đun nhà cung cấp dựa trên các chức năng mở rộng sẽ không hoạt động vì thư viện AOSP có cùng tên không có chức năng mở rộng. Nếu các mô-đun của nhà cung cấp trực tiếp hoặc gián tiếp phụ thuộc vào các chức năng mở rộng, thì nhà cung cấp nên sao chép các thư viện chia sẻ DAUX, DXUA và DXUX vào phân vùng của nhà cung cấp (các quy trình của nhà cung cấp luôn tìm kiếm các thư viện dùng chung trong phân vùng của nhà cung cấp trước tiên). Tuy nhiên, thư viện LL-NDK không được sao chép, do đó, mô-đun của nhà cung cấp không được dựa vào các chức năng mở rộng được xác định bởi thư viện LL-NDK đã sửa đổi.

Thư viện chia sẻ DAUA có thể vẫn còn trên phân vùng hệ thống nếu thư viện AOSP tương ứng có thể cung cấp chức năng tương tự và các mô-đun của nhà cung cấp tiếp tục hoạt động khi phân vùng hệ thống bị ghi đè bởi Hình ảnh hệ thống chung (GSI).

Việc thay thế thả vào rất quan trọng vì các thư viện VNĐK chưa sửa đổi trong GSI sẽ liên kết với các thư viện dùng chung đã sửa đổi khi xung đột tên. Nếu thư viện AOSP được sửa đổi theo cách không tương thích với API/ABI thì thư viện AOSP trong GSI có thể không liên kết được hoặc dẫn đến hành vi không xác định.