Produsen perangkat Android mengubah kode sumber library AOSP karena berbagai alasan. Beberapa vendor menerapkan ulang fungsi di library AOSP untuk meningkatkan performa, sementara vendor lain menambahkan hook baru, API baru, atau fungsi baru ke library AOSP. Bagian ini memberikan panduan untuk memperluas library AOSP dengan cara yang tidak merusak CTS/VTS.
Penggantian langsung
Semua library bersama yang dimodifikasi harus kompatibel dengan biner, penggantian langsung dari library AOSP-nya. Semua pengguna AOSP yang ada harus dapat menggunakan library bersama yang dimodifikasi tanpa kompilasi ulang. Persyaratan ini menyiratkan hal berikut:
- Fungsi AOSP tidak boleh dihapus.
- Struktur tidak boleh diubah jika struktur tersebut ditampilkan kepada penggunanya.
- Prasyarat fungsi tidak boleh diperkuat.
- Fungsi harus menyediakan fungsi yang setara.
- Post-condition fungsi tidak boleh dilemahkan.
Klasifikasi modul yang diperluas
Klasifikasikan modul berdasarkan fungsi yang ditentukan dan digunakan.
Catatan: Fungsi digunakan di sini, bukan API/ABI karena Anda dapat menambahkan fungsi tanpa mengubah API/ABI apa pun.
Bergantung pada fungsi yang ditentukan dalam modul, modul dapat diklasifikasikan menjadi DA-Module dan DX-Module:
-
Defining-only-AOSP Modules (DA-Module) tidak menentukan fungsi
baru yang tidak ada di modul AOSP.
- Contoh 1. Library AOSP utuh yang tidak dimodifikasi adalah Modul DA.
- Contoh 2. Jika vendor menulis ulang fungsi di
libcrypto.so
dengan petunjuk SIMD (tanpa menambahkan fungsi baru),libcrypto.so
yang dimodifikasi akan menjadi Modul DA.
-
Defining-Extension Modules (DX-Module) menentukan fungsi
baru atau tidak memiliki counterpart AOSP.
- Contoh 1. Jika vendor menambahkan fungsi bantuan ke
libjpeg.so
untuk mengakses beberapa data internal, makalibjpeg.so
yang dimodifikasi akan menjadi DX-Lib dan fungsi yang baru ditambahkan akan menjadi bagian yang diperluas dari library. - Contoh 2. Jika vendor menentukan library non-AOSP bernama
libfoo.so
,libfoo.so
akan menjadi DX-Lib.
- Contoh 1. Jika vendor menambahkan fungsi bantuan ke
Bergantung pada fungsi yang digunakan oleh modul, modul dapat diklasifikasikan menjadi Modul UA dan Modul UX.
-
Modul yang Hanya Menggunakan AOSP (Modul UA) hanya menggunakan fungsi AOSP
dalam penerapannya. Aplikasi tersebut tidak bergantung pada ekstensi non-AOSP apa pun.
- Contoh 1. Library AOSP utuh yang tidak dimodifikasi adalah Modul UA.
- Contoh 2. Jika
libjpeg.so
library bersama yang dimodifikasi hanya mengandalkan API AOSP lainnya, maka library tersebut akan menjadi Modul UA.
-
Menggunakan Modul Ekstensi (Modul UX) mengandalkan beberapa fungsi
non-AOSP dalam implementasinya.
- Contoh 1. Jika
libjpeg.so
yang dimodifikasi bergantung pada library non-AOSP lain bernamalibjpeg_turbo2.so
, makalibjpeg.so
yang dimodifikasi akan menjadi Modul UX. - Contoh 2. Jika vendor menambahkan fungsi baru ke
libexif.so
yang dimodifikasi danlibjpeg.so
yang dimodifikasi menggunakan fungsi yang baru ditambahkan darilibexif.so
, makalibjpeg.so
yang dimodifikasi akan menjadi Modul UX.
- Contoh 1. Jika
Definisi dan penggunaan bersifat independen satu sama lain:
Fungsi yang Digunakan | |||
---|---|---|---|
Hanya AOSP (UA) | Diperpanjang (UX) | ||
Fungsi yang Ditentukan | Hanya AOSP (DA) | DAUA | DAUX |
Diperpanjang (DX) | DXUA | DXUX |
Mekanisme ekstensi VNDK
Modul vendor yang mengandalkan fungsi yang diperluas tidak akan berfungsi karena library AOSP dengan nama yang sama tidak memiliki fungsi yang diperluas. Jika modul vendor secara langsung atau tidak langsung bergantung pada fungsi yang diperluas, vendor harus menyalin library bersama DAUX, DXUA, dan DXUX ke partisi vendor (proses vendor selalu mencari library bersama di partisi vendor terlebih dahulu). Namun, library LL-NDK tidak boleh disalin, sehingga modul vendor tidak boleh mengandalkan fungsi yang diperluas yang ditentukan oleh library LL-NDK yang dimodifikasi.
Library bersama DAUA dapat tetap berada di partisi sistem jika library AOSP yang sesuai dapat memberikan fungsi yang sama dan modul vendor terus berfungsi saat partisi sistem ditimpa oleh Gambar Sistem Generik (GSI).
Penggantian langsung penting karena library VNDK yang tidak diubah di GSI akan ditautkan dengan library bersama yang diubah saat terjadi tabrakan nama. Jika library AOSP dimodifikasi dengan cara yang tidak kompatibel dengan API/ABI, library AOSP di GSI mungkin gagal ditautkan atau menyebabkan perilaku yang tidak ditentukan.