Produsen perangkat Android mengubah kode sumber pustaka AOSP karena berbagai alasan. Beberapa vendor mengimplementasikan kembali fungsi di perpustakaan AOSP untuk meningkatkan kinerja sementara vendor lain menambahkan kait baru, API baru, atau fungsi baru ke perpustakaan AOSP. Bagian ini memberikan panduan untuk memperluas pustaka AOSP dengan cara yang tidak merusak CTS/VTS.
Penggantian drop-in
Semua perpustakaan bersama yang dimodifikasi harus kompatibel dengan biner , pengganti drop-in dari mitra AOSP mereka. Semua pengguna AOSP yang ada harus dapat menggunakan perpustakaan bersama yang dimodifikasi tanpa kompilasi ulang. Persyaratan ini menyiratkan hal berikut:
- Fungsi AOSP tidak boleh dihapus.
- Struktur tidak boleh diubah jika struktur tersebut terkena penggunanya.
- Prakondisi fungsi tidak boleh diperkuat.
- Fungsi harus menyediakan fungsi yang setara.
- Kondisi pasca fungsi tidak boleh dilemahkan.
Klasifikasi modul yang diperluas
Klasifikasikan modul berdasarkan fungsionalitas yang mereka definisikan dan gunakan .
Catatan : Fungsionalitas digunakan di sini sebagai ganti API/ABI karena dimungkinkan untuk menambahkan fungsionalitas tanpa mengubah API/ABI apa pun.
Tergantung pada fungsionalitas yang didefinisikan dalam sebuah modul, modul dapat diklasifikasikan menjadi DA-Module dan DX-Module :
- Mendefinisikan-only-AOSP Modules (DA-Module) tidak mendefinisikan fungsionalitas baru yang tidak ada pada rekanan AOSP.
- Contoh 1. Pustaka AOSP utuh yang tidak dimodifikasi adalah DA-Module.
- Contoh 2. Jika vendor menulis ulang fungsi di
libcrypto.so
dengan instruksi SIMD (tanpa menambahkan fungsi baru), makalibcrypto.so
yang dimodifikasi akan menjadi DA-Module.
- Defining-Extension Modules (DX-Module) mendefinisikan fungsionalitas baru atau tidak memiliki mitra AOSP.
- Contoh 1. Jika vendor menambahkan fungsi pembantu ke
libjpeg.so
untuk mengakses beberapa data internal, makalibjpeg.so
yang dimodifikasi akan menjadi DX-Lib dan fungsi yang baru ditambahkan akan menjadi bagian perpustakaan yang diperluas. - Contoh 2. Jika vendor mendefinisikan library non-AOSP bernama
libfoo.so
, makalibfoo.so
akan menjadi DX-Lib.
- Contoh 1. Jika vendor menambahkan fungsi pembantu ke
Tergantung pada fungsionalitas yang digunakan oleh sebuah modul, modul dapat diklasifikasikan menjadi UA-Module dan UX-Module .
- Menggunakan-only-AOSP Modules (UA-Module) hanya menggunakan fungsionalitas AOSP dalam implementasinya. Mereka tidak bergantung pada ekstensi non-AOSP apa pun.
- Contoh 1. Pustaka AOSP utuh yang tidak dimodifikasi adalah UA-Module.
- Contoh 2. Jika shared library
libjpeg.so
yang dimodifikasi hanya mengandalkan API AOSP lain, maka itu akan menjadi UA-Module.
- Menggunakan-Modul Ekstensi (UX-Module) mengandalkan beberapa fungsi non-AOSP dalam implementasinya.
- Contoh 1. Jika
libjpeg.so
yang dimodifikasi bergantung pada pustaka non-AOSP lain bernamalibjpeg_turbo2.so
, makalibjpeg.so
yang dimodifikasi akan menjadi UX-Module. - Contoh 2. Jika vendor menambahkan fungsi baru ke libexif.so yang dimodifikasi dan
libexif.so
yang dimodifikasi menggunakanlibjpeg.so
yang baru ditambahkan darilibexif.so
, makalibjpeg.so
yang dimodifikasi akan menjadi Modul-UX.
- Contoh 1. Jika
Definisi dan penggunaan independen satu sama lain:
Fungsi yang Digunakan | |||
---|---|---|---|
Hanya AOSP (UA) | Diperpanjang (UX) | ||
Fungsionalitas yang Ditetapkan | Hanya AOSP (DA) | DUA | DAUX |
Diperpanjang (DX) | DXUA | DXUX |
Mekanisme ekstensi VNDK
Modul vendor yang mengandalkan fungsionalitas yang diperluas tidak akan berfungsi karena pustaka AOSP dengan nama yang sama tidak memiliki fungsionalitas yang diperluas. Jika modul vendor secara langsung atau tidak langsung bergantung pada fungsionalitas yang diperluas, vendor harus menyalin pustaka bersama DAUX, DXUA, dan DXUX ke partisi vendor (proses vendor selalu mencari pustaka bersama di partisi vendor terlebih dahulu). Namun, pustaka LL-NDK tidak boleh disalin, sehingga modul vendor tidak boleh bergantung pada fungsionalitas tambahan yang ditentukan oleh pustaka LL-NDK yang dimodifikasi.
Pustaka bersama DAUA dapat tetap berada di partisi sistem jika pustaka AOSP yang sesuai dapat menyediakan fungsionalitas yang sama dan modul vendor terus bekerja ketika partisi sistem ditimpa oleh Gambar Sistem Generik (GSI).
Penggantian drop-in penting karena pustaka VNDK yang tidak dimodifikasi di GSI akan ditautkan dengan pustaka bersama yang dimodifikasi pada tabrakan nama. Jika pustaka AOSP dimodifikasi dengan cara yang tidak kompatibel dengan API/ABI, pustaka AOSP di GSI mungkin gagal menautkan atau menghasilkan perilaku yang tidak ditentukan.