Ekstensi VNDK

Produsen perangkat Android mengubah kode sumber perpustakaan AOSP karena berbagai alasan. Beberapa vendor menerapkan kembali fungsi di perpustakaan AOSP untuk meningkatkan kinerja sementara vendor lain menambahkan hook baru, API baru, atau fungsi baru ke perpustakaan AOSP. Bagian ini memberikan pedoman untuk memperluas perpustakaan AOSP dengan cara yang tidak merusak CTS/VTS.

Penggantian drop-in

Semua perpustakaan bersama yang dimodifikasi harus kompatibel dengan biner , pengganti drop-in dari rekan 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 terpapar pada penggunanya.
  • Prasyarat fungsi tidak boleh diperkuat.
  • Fungsi harus menyediakan fungsionalitas yang setara.
  • Fungsi pasca-kondisi tidak boleh dilemahkan.

Klasifikasi modul yang diperluas

Klasifikasikan modul berdasarkan fungsi yang ditentukan dan digunakan .

Catatan : Fungsionalitas digunakan di sini sebagai pengganti API/ABI karena dimungkinkan untuk menambahkan fungsionalitas tanpa mengubah API/ABI apa pun.

Tergantung pada fungsi yang ditentukan dalam modul, modul dapat diklasifikasikan menjadi DA-Module dan DX-Module :

  • Modul Defining-only-AOSP (DA-Module) tidak mendefinisikan fungsionalitas baru yang tidak ada pada mitra AOSP.
    • Contoh 1. Pustaka AOSP utuh yang tidak dimodifikasi adalah Modul DA.
    • Contoh 2. Jika vendor menulis ulang fungsi di libcrypto.so dengan instruksi SIMD (tanpa menambahkan fungsi baru), maka libcrypto.so yang dimodifikasi akan menjadi Modul DA.
  • Modul Defining-Extension (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, maka libjpeg.so yang dimodifikasi akan menjadi DX-Lib dan fungsi yang baru ditambahkan akan menjadi bagian perpustakaan yang diperluas.
    • Contoh 2. Jika vendor mendefinisikan perpustakaan non-AOSP bernama libfoo.so , maka libfoo.so akan menjadi DX-Lib.

Tergantung pada fungsionalitas yang digunakan oleh suatu modul, modul dapat diklasifikasikan menjadi UA-Module dan UX-Module .

  • Modul AOSP yang hanya menggunakan (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 Modul UA.
    • Contoh 2. Jika perpustakaan bersama yang dimodifikasi libjpeg.so hanya mengandalkan API AOSP lainnya, maka itu akan menjadi Modul UA.
  • Modul Penggunaan Ekstensi (Modul UX) mengandalkan beberapa fungsi non-AOSP dalam implementasinya.
    • Contoh 1. Jika libjpeg.so yang dimodifikasi bergantung pada perpustakaan non-AOSP lain bernama libjpeg_turbo2.so , maka libjpeg.so yang dimodifikasi akan menjadi Modul UX.
    • Contoh 2. Jika vendor menambahkan fungsi baru ke libexif.so mereka yang telah dimodifikasi dan libjpeg.so mereka yang telah dimodifikasi menggunakan fungsi yang baru ditambahkan dari libexif.so , maka libjpeg.so mereka yang telah dimodifikasi akan menjadi Modul UX.

Definisi dan penggunaannya tidak bergantung satu sama lain:

Fungsionalitas yang Digunakan
Hanya AOSP (UA) Diperluas (UX)
Fungsionalitas yang Ditentukan Hanya AOSP (DA) DAUA DAUX
Diperpanjang (DX) DXUA DXUX

Mekanisme ekstensi VNDK

Modul vendor yang mengandalkan fungsionalitas yang diperluas tidak akan berfungsi karena perpustakaan 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 berfungsi ketika partisi sistem ditimpa oleh Generic System Image (GSI).

Penggantian drop-in penting karena pustaka VNDK yang tidak dimodifikasi di GSI akan tertaut dengan pustaka bersama yang dimodifikasi jika terjadi tabrakan nama. Jika pustaka AOSP dimodifikasi dengan cara yang tidak kompatibel dengan API/ABI, pustaka AOSP di GSI mungkin gagal ditautkan atau mengakibatkan perilaku tidak terdefinisi.