Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Ruang nama untuk Perpustakaan Asli

Android 7.0 memperkenalkan ruang nama untuk pustaka asli guna membatasi visibilitas API internal dan mengatasi situasi di mana aplikasi secara tidak sengaja menggunakan pustaka platform, bukan miliknya sendiri. Lihat Stabilitas Meningkatkan dengan Pembatasan Swasta C / C ++ Symbol di Android 7.0 Android Developers posting blog untuk perubahan aplikasi-spesifik.

Arsitektur

Di Android 7.0 dan yang lebih tinggi, pustaka sistem dipisahkan dari pustaka aplikasi.

Ruang nama untuk perpustakaan asli

Gambar 1. Ruang nama untuk perpustakaan asli

Ruang nama untuk pustaka asli mencegah aplikasi menggunakan API asli platform pribadi (seperti yang dilakukan dengan OpenSSL). Ini juga menghilangkan situasi di mana aplikasi sengaja menggunakan platform perpustakaan bukan mereka sendiri (seperti yang disaksikan dengan libpng ). Sulit bagi pustaka aplikasi untuk menggunakan pustaka 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 mencantumkannya secara eksplisit di .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, di mana COMPANYNAME mengacu pada nama produsen (seperti awesome.company ). COMPANYNAME harus sesuai dengan [A-Za-z0-9_.-]+ ; karakter alfanumerik, _, . (titik) dan -. Dimungkinkan untuk memiliki beberapa file .txt di perangkat jika beberapa pustaka berasal dari penyedia solusi eksternal.

Perpustakaan asli dalam system partisi yang dibuat publik oleh produsen perangkat HARUS diberi nama lib*COMPANYNAME.so , misalnya, libFoo.awesome.company.so . Dengan kata lain, libFoo.so tanpa nama perusahaan akhiran TIDAK HARUS dibuat publik. The COMPANYNAME dalam nama file library harus sesuai dengan COMPANYNAME di nama file txt di mana nama perpustakaan terdaftar.

Pustaka asli yang merupakan bagian dari AOSP TIDAK HARUS dipublikasikan (kecuali pustaka asli publik standar yang bersifat publik secara default). Hanya pustaka tambahan yang ditambahkan oleh vendor silikon atau produsen perangkat yang dapat diakses oleh aplikasi.

Mulai dari Android 8.0, pustaka publik vendor memiliki batasan tambahan berikut dan penyiapan yang diperlukan:

  1. Pustaka asli di vendor harus diberi label dengan benar sehingga dapat diakses oleh aplikasi. Jika akses diperlukan oleh aplikasi (termasuk aplikasi pihak ketiga), perpustakaan harus diberi label sebagai same_process_hal_file dalam khusus vendor file_contexts file sebagai berikut:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    mana libnative.so adalah nama dari perpustakaan asli.
  2. Pustaka, baik secara langsung atau transitif melalui dependensinya, tidak boleh bergantung pada pustaka sistem selain pustaka VNDK-SP dan LLNDK. Cari daftar VNDK-SP dan LLNDK perpustakaan di development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

Memperbarui aplikasi agar tidak menggunakan perpustakaan asli non-publik

Fitur ini diaktifkan hanya untuk aplikasi yang menargetkan SDK versi 24 atau yang lebih baru; untuk kompatibilitas, lihat Tabel 1. Apa yang diharapkan jika aplikasi Anda menghubungkan terhadap perpustakaan asli pribadi . Daftar pustaka asli Android yang dapat diakses oleh aplikasi (juga dikenal sebagai pustaka asli publik) tercantum di bagian CDD 3.1.1. Aplikasi yang menargetkan 24 atau lebih baru dan menggunakan perpustakaan non-publik apa pun harus diperbarui. Lihat NDK Apps Menghubungkan ke Platform Perpustakaan untuk lebih jelasnya.

Memperbarui aplikasi untuk dependensi perpustakaan asli mereka

Aplikasi target SDK versi 31 (Android 12) atau lebih tinggi harus secara eksplisit menentukan asli bersama dependensi perpustakaan mereka dengan menggunakan <uses-native-library> tag di manifes aplikasi. Jika ada bagian dari pustaka yang diminta tidak ada di perangkat, aplikasi tidak diinstal. Ketika aplikasi diinstal, mereka disediakan dengan hanya shared library asli yang mereka minta. Ini berarti aplikasi tidak dapat mengakses pustaka bersama asli yang tidak muncul di manifes aplikasi.