Nhà sản xuất thiết bị Android thay đổi mã nguồn của thư viện AOSP (Dự án nguồn mở Android) cho có nhiều lý do. Một số nhà cung cấp triển khai lại các hàm trong thư viện AOSP để tăng hiệu suất trong khi các nhà cung cấp khác thêm nội dung hấp dẫn, API mới hoặc vào thư viện AOSP. Phần này cung cấp các nguyên tắc cho mở rộng thư viện AOSP (Dự án nguồn mở Android) theo cách không làm hỏng CTS/VTS.
Thay thế khi mang đến
Tất cả thư viện dùng chung đã sửa đổi phải tương thích nhị phân, thay thế sẵn có của phiên bản AOSP (Dự án nguồn mở Android). Tất cả quảng cáo hiện có Người dùng AOSP phải sử dụng được thư viện chia sẻ đã 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 nội dung sau:
- Không được xoá các hàm AOSP (Dự án nguồn mở Android).
- Không được thay đổi kết cấu nếu các kết cấu đó tiếp xúc với cấu trúc người dùng.
- Không được tăng cường điều kiện tiên quyết của hàm.
- Hàm phải cung cấp các chức năng tương đương.
- Không được làm suy yếu điều kiện sau của hàm.
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.
Tuỳ thuộc vào chức năng được xác định trong một mô-đun, các mô-đun có thể là được phân loại thành DA-Module (Mô-đun DA) và DX-Module (Mô-đun DX):
-
Mô-đun chỉ xác định AOSP (Dự án nguồn mở Android) (DA-Module) không xác định mới
không có trong phiên bản AOSP (Dự án nguồn mở Android).
- Ví dụ 1. Thư viện AOSP (Dự án nguồn mở Android) chưa sửa đổi nguyên vẹn là Mô-đun DA.
- Ví dụ 2. Nếu một nhà cung cấp viết lại các hàm trong
libcrypto.so
với hướng dẫn SIMD (không thêm thông tin mới hàm), thìlibcrypto.so
được sửa đổi sẽ là Mô-đun DA.
-
Xác định mô-đun mở rộng (DX-Module) xác định
hoặc không có phiên bản tương ứng AOSP (Dự án nguồn mở Android).
- Ví dụ 1. Nếu nhà cung cấp thêm chức năng trợ giúp cho
libjpeg.so
để truy cập vào một số dữ liệu nội bộ, sau đó sửa đổilibjpeg.so
sẽ là DX-Lib và hàm 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 một thư viện không phải AOSP (Dự án nguồn mở Android) có tên
libfoo.so
, thìlibfoo.so
sẽ là bản nhạc DX-Lib.
- Ví dụ 1. Nếu nhà cung cấp thêm chức năng trợ giúp cho
Tuỳ thuộc vào chức năng mà một mô-đun sử dụng, các mô-đun có thể được phân loại vào UA-Module (Mô-đun UA) và UX-Module (Mô-đun trải nghiệm người dùng).
-
Mô-đun AOSP chỉ sử dụng (UA-Module) chỉ sử dụng các chức năng AOSP
trong quá trình triển khai. Các ứng dụng này không phụ thuộc vào bất kỳ tiện ích nào không phải AOSP (Dự án nguồn mở Android).
- Ví dụ 1. Thư viện AOSP (Dự án nguồn mở Android) chưa sửa đổi nguyên vẹn là Mô-đun UA.
- Ví dụ 2. Nếu thư viện chia sẻ được sửa đổi
libjpeg.so
chỉ dựa vào các API AOSP khác, thì đó sẽ là Mô-đun UA.
-
Mô-đun sử dụng phần mở rộng (Mô-đun trải nghiệm người dùng) dựa vào một số mô-đun không phải AOSP (Dự án nguồn mở Android)
trong quá trình triển khai.
- Ví dụ 1. Nếu
libjpeg.so
được sửa đổi phụ thuộc vào một thư viện khác không phải AOSP (Dự án nguồn mở Android) có tênlibjpeg_turbo2.so
, thìlibjpeg.so
được sửa đổi sẽ là Mô-đun trải nghiệm người dùng. - Ví dụ 2. Nếu nhà cung cấp thêm một chức năng mới vào danh sách nhà cung cấp đã sửa đổi
libexif.so
vàlibjpeg.so
được sửa đổi của chúng sử dụng hàm mới được thêm vào từlibexif.so
, sau đó các hàm mới được sửa đổilibjpeg.so
sẽ là một Mô-đun trải nghiệm người dùng.
- Ví dụ 1. Nếu
Định nghĩa và cách sử dụng độc lập với nhau:
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) | Số người dùng hoạt động hằng ngày (DAUA) | Số người dùng hoạt động hằng ngày (DAUX) |
Mở rộng (DX) | DXUA | DXUX |
Cơ chế gia hạn VNDK
Các mô-đun nhà cung cấp phụ thuộc vào 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 phụ thuộc trực tiếp hoặc gián tiếp vào các chức năng mở rộng, nhà cung cấp phải sao chép thư viện chia sẻ DAUX, DXUA và DXUX sang nhà cung cấp phân vùng (quy trình của nhà cung cấp luôn tìm thư viện dùng chung trong nhà cung cấp phân vùng trước). Tuy nhiên, thư viện LL-NDK không được sao chép, vì vậy nhà cung cấp các mô-đun không được dựa vào các chức năng mở rộng được xác định theo bản sửa đổi Thư viện LL-NDK.
Thư viện dùng chung DAUA có thể vẫn nằm 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 và nhà cung cấp tương tự các mô-đun tiếp tục hoạt động khi phân vùng hệ thống bị ghi đè bằng mã Hình ảnh hệ thống (GSI).
Việc thay thế khả năng thả xuống là rất quan trọng vì các thư viện VNDK chưa được sửa đổi trong GSI sẽ liên kết với các thư viện dùng chung đã sửa đổi khi có xung đột về 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, AOSP (Dự án nguồn mở Android) các thư viện trong GSI có thể không liên kết được hoặc dẫn đến các hành vi không xác định.