Namespace untuk Perpustakaan Asli

Android 7.0 memperkenalkan namespace untuk pustaka asli guna membatasi visibilitas API internal dan mengatasi 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.

Ruang nama untuk perpustakaan asli

Gambar 1. Namespace untuk perpustakaan asli

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, dengan COMPANYNAME mengacu pada nama produsen (seperti awesome.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. NAMA COMPANYNAME pada nama file perpustakaan HARUS cocok dengan 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:

  1. 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 dalam file_contexts khusus vendor sebagai berikut:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    dengan libnative.so adalah nama pustaka asli.
  2. 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 .

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.