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 định và sử 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-Module và DX-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.
- Ví dụ 1. Nếu nhà cung cấp thêm chức năng trợ giúp vào
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-Module và UX-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ênlibjpeg_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.
- Ví dụ 1. Nếu
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.