Android 7.0 memperkenalkan namespace untuk library native guna membatasi API internal dan mengatasi situasi saat aplikasi tidak sengaja menggunakan platform {i>library<i} alih-alih milik mereka sendiri. Lihat dokumentasi Peningkatan Stabilitas dengan Pembatasan Simbol C/C++ Pribadi di Android 7.0 Android Postingan blog developer untuk perubahan khusus aplikasi.
Arsitektur
Di Android 7.0 dan yang lebih tinggi, library sistem dipisahkan dari library aplikasi.
Namespace untuk library native mencegah aplikasi menggunakan native platform pribadi
API (seperti yang dilakukan dengan OpenSSL). Hal ini juga menghapus situasi saat aplikasi
tidak sengaja menggunakan library platform
alih-alih milik mereka sendiri (seperti yang
dengan libpng
). Sulit bagi library aplikasi untuk menggunakan
library sistem secara tidak sengaja (dan sebaliknya).
Menambahkan library native tambahan
Selain standar perpustakaan asli publik, vendor silicon (mulai dari Android 7.0) dan produsen perangkat (mulai dari Android 9) dapat memilih untuk menyediakan library native tambahan dapat diakses oleh aplikasi dengan menempatkannya di folder library masing-masing dan mencantumkannya secara eksplisit dalam file .txt.
Folder library adalah:
/vendor/lib
(untuk 32-bit) dan/vendor/lib64
(untuk 64-bit) untuk perpustakaan dari vendor silicon/system/lib
(untuk 32-bit) dan/system/lib64
(untuk 64-bit) untuk library dari produsen perangkat
File .txt tersebut adalah:
/vendor/etc/public.libraries.txt
untuk library dari vendor silicon/system/etc/public.libraries-COMPANYNAME.txt
untuk library dari produsen perangkat, denganCOMPANYNAME
mengacu pada nama produsen (sepertiawesome.company
).COMPANYNAME
harus cocok dengan[A-Za-z0-9_.-]+
karakter alfanumerik, _, . (titik) dan -. Anda dapat memiliki beberapa file .txt seperti itu di perangkat jika beberapa library berasal dari solusi eksternal penyedia layanan.
Library native di partisi system
yang dipublikasikan oleh produsen perangkat
HARUS diberi nama lib*COMPANYNAME.so
, misalnya, libFoo.awesome.company.so
.
Dengan kata lain, libFoo.so
tanpa akhiran nama perusahaan TIDAK BOLEH dipublikasikan.
COMPANYNAME
dalam nama file library HARUS sesuai dengan COMPANYNAME
di
{i>file<i} .txt yang mencantumkan nama {i>library<i}.
Library native yang merupakan bagian dari AOSP TIDAK BOLEH dipublikasikan (kecuali library library native publik yang bersifat publik secara default). Hanya pustaka tambahan yang ditambahkan oleh vendor silikon atau produsen perangkat dapat diakses oleh aplikasi.
Mulai dari Android 8.0, pustaka publik vendor memiliki pembatasan dan penyiapan yang diperlukan:
- Pustaka asli di vendor harus diberi label dengan benar sehingga dapat
dapat diakses oleh aplikasi. Jika akses diperlukan oleh aplikasi (termasuk aplikasi pihak ketiga
aplikasi pihak ketiga), library harus diberi label
same_process_hal_file
dalam filefile_contexts
khusus vendor sebagai berikut:/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
denganlibnative.so
adalah nama library native. - Library, baik secara langsung maupun transitif melalui dependensinya, tidak boleh
bergantung pada library sistem selain library VNDK-SP dan LLNDK. Cari daftar
Library VNDK-SP dan LLNDK di
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
.
Mulai dari Android 15, library publik vendor dapat ditempatkan ke dalam
APEX vendor. Jika dikemas dalam APEX vendor, cantumkan library
di properti provideNativeLibs
di manifes APEX.
Mengupdate aplikasi agar tidak menggunakan library native nonpublik
Fitur ini hanya diaktifkan untuk aplikasi yang menargetkan SDK versi 24 atau yang lebih baru; untuk kompatibilitas mundur, lihat Tabel Akun Layanan 1.Hal yang akan terjadi jika aplikasi Anda ditautkan ke library native pribadi. Daftar library native Android yang dapat diakses oleh aplikasi (juga dikenal sebagai perpustakaan asli publik) terdaftar dalam CDD bagian 3.1.1. Aplikasi yang menargetkan 24 atau nanti dan menggunakan perpustakaan non-publik harus diperbarui. Lihat NDK Penautan Aplikasi ke Library Platform untuk detail selengkapnya.
Mengupdate aplikasi untuk dependensi library native-nya
Aplikasi yang menargetkan SDK versi 31 (Android 12) atau yang lebih tinggi harus
menentukan secara eksplisit dependensi library bersama native-nya
<uses-native-library>
di manifes aplikasi. Jika ada bagian dari
library tidak ada di perangkat, aplikasi belum diinstal. Saat diinstal, aplikasi akan
disediakan hanya dengan library native bersama yang mereka minta. Hal ini berarti bahwa
aplikasi tidak dapat mengakses library bersama native yang tidak muncul di manifes aplikasi.