Ekstensi VNDK

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), maka libcrypto.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, 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 library non-AOSP bernama libfoo.so , maka libfoo.so akan menjadi DX-Lib.

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

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.