Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Ekstensi VNDK

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

Pengganti drop-in

Semua pustaka bersama yang dimodifikasi harus kompatibel dengan biner , pengganti drop-in dari mitra AOSP mereka. Semua pengguna AOSP yang ada harus dapat menggunakan pustaka bersama yang dimodifikasi tanpa kompilasi ulang. Persyaratan ini menyiratkan yang berikut:

  • Fungsi AOSP tidak boleh dihapus.
  • Struktur tidak boleh diubah jika struktur tersebut diekspos kepada 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 fungsionalitas yang mereka definisikan dan gunakan .

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

Bergantung pada fungsionalitas yang ditentukan dalam modul, modul dapat diklasifikasikan menjadi DA-Module dan DX-Module :

  • Defining-only-AOSP Modules (DA-Module) tidak menentukan fungsionalitas baru yang tidak ada di 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 dimodifikasi akan menjadi Modul DA.
  • Defining-Extension Modules (DX-Module) baik 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 dimodifikasi akan menjadi DX-Lib dan fungsi yang baru ditambahkan akan menjadi bagian perpustakaan yang diperluas.
    • Contoh 2. Jika vendor mendefinisikan pustaka non-AOSP bernama libfoo.so , maka libfoo.so akan menjadi DX-Lib.

Bergantung 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.
    • Contoh 1. Pustaka AOSP utuh yang tidak dimodifikasi adalah UA-Module.
    • Contoh 2. Jika pustaka bersama yang dimodifikasi libjpeg.so hanya bergantung pada API AOSP lain, maka itu akan menjadi Modul UA.
  • Using-Extension Modules (UX-Module) mengandalkan beberapa fungsi non-AOSP dalam implementasinya.
    • Contoh 1. Jika libjpeg.so dimodifikasi bergantung pada pustaka non-AOSP lain bernama libjpeg_turbo2.so , maka libjpeg.so dimodifikasi akan menjadi Modul UX.
    • Contoh 2. Jika vendor menambahkan fungsi baru untuk mereka dimodifikasi libexif.so dan mereka dimodifikasi libjpeg.so menggunakan fungsi baru ditambahkan dari libexif.so , maka mereka dimodifikasi libjpeg.so akan menjadi UX-Modul.

Definisi dan penggunaan tidak bergantung satu sama lain:

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

Mekanisme ekstensi VNDK

Modul vendor yang mengandalkan fungsionalitas tambahan tidak akan berfungsi karena pustaka AOSP dengan nama yang sama tidak memiliki fungsionalitas tambahan. 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, library LL-NDK tidak boleh disalin, jadi modul vendor tidak boleh bergantung pada fungsi tambahan yang ditentukan oleh library 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 saat partisi sistem ditimpa oleh Generic System Image (GSI).

Drop-in replacement penting dilakukan karena library VNDK yang tidak dimodifikasi di GSI akan ditautkan dengan library bersama yang dimodifikasi saat terjadi benturan nama. Jika pustaka AOSP diubah dengan cara yang tidak kompatibel dengan API / ABI, pustaka AOSP di GSI mungkin gagal untuk ditautkan atau mengakibatkan perilaku yang tidak ditentukan.