Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Không gian tên cho Thư viện gốc

Android 7.0 đã giới thiệu không gian tên cho các thư viện gốc để hạn chế khả năng hiển thị API nội bộ và giải quyết các tình huống trong đó các ứng dụng vô tình sử dụng thư viện nền tảng thay vì thư viện của chúng. Xem Ổn định Cải thiện với Restrictions Private C / C ++ Symbol trong Android 7.0 Nhà phát triển Android bài đăng blog cho những thay đổi ứng dụng cụ thể.

Ngành kiến ​​trúc

Trong Android 7.0 trở lên, thư viện hệ thống được tách biệt với thư viện ứng dụng.

Không gian tên cho thư viện gốc

Hình 1. Không gian tên cho các thư viện nguồn gốc

Không gian tên cho thư viện gốc ngăn ứng dụng sử dụng API gốc nền tảng riêng tư (như đã làm với OpenSSL). Nó cũng loại bỏ những tình huống mà các ứng dụng vô tình sử dụng thư viện nền tảng thay vì của riêng mình (như chứng kiến với libpng ). Rất khó để các thư viện ứng dụng vô tình sử dụng thư viện hệ thống nội bộ (và ngược lại).

Thêm thư viện gốc bổ sung

Ngoài các thư viện gốc công cộng tiêu chuẩn, các nhà cung cấp silicon (bắt đầu từ Android 7.0) và các nhà sản xuất thiết bị (bắt đầu từ Android 9) có thể chọn cung cấp các thư viện gốc bổ sung có thể truy cập được cho các ứng dụng bằng cách đặt chúng trong các thư mục thư viện tương ứng và liệt kê chúng một cách rõ ràng trong .txt các tập tin.

Các thư mục thư viện là:

  • /vendor/lib (32-bit) và /vendor/lib64 (64-bit) cho các thư viện từ các nhà cung cấp silicon
  • /system/lib (32-bit) và /system/lib64 (64-bit) cho các thư viện từ các nhà sản xuất thiết bị

Các tệp .txt là:

  • /vendor/etc/public.libraries.txt cho các thư viện từ các nhà cung cấp silicon
  • /system/etc/public.libraries-COMPANYNAME.txt cho các thư viện từ các nhà sản xuất thiết bị, nơi COMPANYNAME đề cập đến tên của nhà sản xuất (ví dụ như awesome.company ). COMPANYNAME phải phù hợp với [A-Za-z0-9_.-]+ ; ký tự chữ và số, _, . (dấu chấm) và -. Có thể có nhiều tệp .txt như vậy trong một thiết bị nếu một số thư viện là từ các nhà cung cấp giải pháp bên ngoài.

Thư viện nguồn gốc trong system phân vùng được công bố bởi các nhà sản xuất thiết bị phải được đặt tên là lib*COMPANYNAME.so , ví dụ, libFoo.awesome.company.so . Nói cách khác, libFoo.so mà không có tên công ty hậu tố PHẢI KHÔNG được công khai. Các COMPANYNAME trong tên tập tin thư viện phải phù hợp với COMPANYNAME trong tên tập tin txt trong đó tên thư viện được liệt kê.

Các thư viện gốc là một phần của AOSP KHÔNG ĐƯỢC đặt ở chế độ công khai (ngoại trừ các thư viện gốc công cộng tiêu chuẩn được công khai theo mặc định). Chỉ các thư viện bổ sung do nhà cung cấp silicon hoặc nhà sản xuất thiết bị thêm vào mới có thể được cung cấp cho các ứng dụng.

Bắt đầu từ Android 8.0, thư viện công cộng của nhà cung cấp có các hạn chế bổ sung và thiết lập bắt buộc sau:

  1. Thư viện gốc trong nhà cung cấp phải được gắn nhãn thích hợp để ứng dụng có thể truy cập được. Nếu truy cập được theo yêu cầu của bất kỳ ứng dụng (bao gồm cả các ứng dụng của bên thứ ba), thư viện phải được dán nhãn như same_process_hal_file trong một nhà cung cấp cụ file_contexts tập tin như sau:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    nơi libnative.so là tên của thư viện bản xứ.
  2. Thư viện, trực tiếp hoặc chuyển tiếp thông qua các phụ thuộc của nó, không được phụ thuộc vào các thư viện hệ thống ngoài các thư viện VNDK-SP và LLNDK. Xác định vị trí trong danh sách của VNDK-SP và LLNDK thư viện tại development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

Cập nhật ứng dụng để không sử dụng thư viện gốc không công khai

Tính năng này chỉ được bật cho các ứng dụng nhắm mục tiêu SDK phiên bản 24 trở lên; cho khả năng tương thích ngược, xem Bảng 1. Điều gì sẽ xảy ra nếu ứng dụng của bạn được liên kết với các thư viện nguồn gốc tin . Danh sách các thư viện gốc Android mà ứng dụng có thể truy cập (còn được gọi là thư viện gốc công cộng) được liệt kê trong CDD phần 3.1.1. Các ứng dụng nhắm mục tiêu từ 24 trở lên và sử dụng bất kỳ thư viện không công cộng nào phải được cập nhật. Xem NDK Apps Liên kết đến nền tảng thư viện để biết thêm chi tiết.

Cập nhật ứng dụng cho các phụ thuộc thư viện gốc của chúng

Các ứng dụng mục tiêu SDK phiên bản 31 (Android 12) hoặc cao hơn phải xác định một cách rõ ràng phụ thuộc thư viện chia sẻ mẹ đẻ của họ bằng cách sử dụng các <uses-native-library> thẻ trong manifest ứng dụng. Nếu bất kỳ phần nào của thư viện được yêu cầu không tồn tại trên thiết bị, ứng dụng đó chưa được cài đặt. Khi các ứng dụng được cài đặt, họ đang cung cấp chỉ với các thư viện chia sẻ bản địa mà họ đã yêu cầu. Điều này có nghĩa là các ứng dụng không thể truy cập các thư viện được chia sẻ gốc không xuất hiện trong tệp kê khai ứng dụng.