Ekstensi VNDK

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, maka libjpeg.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.

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 bernama libjpeg_turbo2.so, maka libjpeg.so yang dimodifikasi akan menjadi Modul UX.
    • Contoh 2. Jika vendor menambahkan fungsi baru ke libexif.so yang dimodifikasi dan libjpeg.so yang dimodifikasi menggunakan fungsi yang baru ditambahkan dari libexif.so, maka libjpeg.so yang dimodifikasi akan menjadi Modul UX.

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.