Android 7.0 memperkenalkan namespace untuk pustaka asli guna membatasi visibilitas API internal dan menyelesaikan situasi ketika aplikasi secara tidak sengaja menggunakan pustaka platform, bukan miliknya sendiri. Lihat entri blog Peningkatan Stabilitas dengan Pembatasan Simbol C/C++ Pribadi di Android 7.0 Pengembang Android untuk mengetahui perubahan khusus aplikasi.
Arsitektur
Di Android 7.0 dan lebih tinggi, pustaka sistem dipisahkan dari pustaka aplikasi.
Namespace untuk perpustakaan asli mencegah aplikasi menggunakan API asli platform pribadi (seperti yang dilakukan dengan OpenSSL). Ini juga menghilangkan situasi di mana aplikasi secara tidak sengaja menggunakan perpustakaan platform dan bukan milik mereka sendiri (seperti yang terlihat pada libpng
). Sulit bagi perpustakaan aplikasi untuk menggunakan perpustakaan sistem internal secara tidak sengaja (dan sebaliknya).
Menambahkan perpustakaan asli tambahan
Selain pustaka asli publik standar, vendor silikon (mulai dari Android 7.0) dan produsen perangkat (mulai dari Android 9) dapat memilih untuk menyediakan pustaka asli tambahan yang dapat diakses oleh aplikasi dengan meletakkannya di bawah folder pustaka masing-masing dan secara eksplisit mencantumkannya dalam .txt file.
Folder perpustakaan adalah:
-
/vendor/lib
(untuk 32-bit) dan/vendor/lib64
(untuk 64-bit) untuk perpustakaan dari vendor silikon -
/system/lib
(untuk 32-bit) dan/system/lib64
(untuk 64-bit) untuk perpustakaan dari produsen perangkat
File .txt adalah:
-
/vendor/etc/public.libraries.txt
untuk perpustakaan dari vendor silikon -
/system/etc/public.libraries-COMPANYNAME.txt
untuk perpustakaan dari produsen perangkat, denganCOMPANYNAME
mengacu pada nama produsen (sepertiawesome.company
).COMPANYNAME
harus cocok dengan[A-Za-z0-9_.-]+
; karakter alfanumerik, _, . (titik) dan -. Ada kemungkinan untuk memiliki beberapa file .txt seperti itu di perangkat jika beberapa perpustakaan berasal dari penyedia solusi eksternal.
Pustaka asli 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
pada nama file perpustakaan HARUS cocok dengan NAMA COMPANYNAME
pada nama file txt yang mencantumkan nama perpustakaan.
Perpustakaan asli yang merupakan bagian dari AOSP TIDAK HARUS dipublikasikan (kecuali perpustakaan asli publik standar yang bersifat publik secara default). Hanya perpustakaan tambahan yang ditambahkan oleh vendor silikon atau produsen perangkat yang dapat diakses oleh aplikasi.
Mulai Android 8.0, perpustakaan umum vendor memiliki batasan tambahan dan penyiapan yang diperlukan berikut:
- Pustaka asli di vendor harus diberi label dengan benar agar dapat diakses oleh aplikasi. Jika akses diperlukan oleh aplikasi apa pun (termasuk aplikasi pihak ketiga), pustaka harus diberi label
same_process_hal_file
dalamfile_contexts
khusus vendor sebagai berikut:/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
denganlibnative.so
adalah nama pustaka asli. - Pustaka, baik secara langsung maupun transitif melalui dependensinya, tidak boleh bergantung pada pustaka sistem selain pustaka VNDK-SP dan LLNDK. Temukan daftar pustaka VNDK-SP dan LLNDK di
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
.
Mulai dari Android 15 (eksperimen AOSP), perpustakaan umum vendor dapat dimasukkan ke dalam vendor APEX . Saat dikemas dalam vendor APEX, cantumkan pustaka di properti provideNativeLibs
di manifes APEX.
Memperbarui aplikasi agar tidak menggunakan perpustakaan asli non-publik
Fitur ini hanya diaktifkan untuk aplikasi yang menargetkan SDK versi 24 atau lebih baru; untuk kompatibilitas mundur, lihat Tabel 1. Apa yang akan terjadi jika aplikasi Anda tertaut ke pustaka asli pribadi . Daftar perpustakaan asli Android yang dapat diakses oleh aplikasi (juga dikenal sebagai perpustakaan asli publik) tercantum dalam CDD bagian 3.1.1. Aplikasi yang menargetkan versi 24 atau lebih baru dan menggunakan perpustakaan non-publik harus diperbarui. Lihat Tautan Aplikasi NDK ke Pustaka Platform untuk detail selengkapnya.
Memperbarui aplikasi untuk dependensi perpustakaan aslinya
Aplikasi yang menargetkan SDK versi 31 (Android 12) atau lebih tinggi harus secara eksplisit menentukan dependensi pustaka bersama aslinya dengan menggunakan tag <uses-native-library>
di manifes aplikasi. Jika bagian mana pun dari perpustakaan yang diminta tidak ada di perangkat, aplikasi tidak diinstal. Saat aplikasi diinstal, aplikasi hanya diberikan perpustakaan bersama asli yang diminta. Artinya, aplikasi tidak bisa mengakses pustaka bersama asli yang tidak muncul di manifes aplikasi.