Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

VNDK擴展

Android設備製造商出於各種原因更改了AOSP庫的源代碼。一些供應商重新實現了AOSP庫中的功能以提高性能,而其他供應商向AOSP庫中添加了新的掛鉤,新的API或新的功能。本節提供了以不破壞CTS / VTS的方式擴展AOSP庫的準則。

臨時替換

所有修改的共享庫必須是二進制兼容的AOSP對等物的直接替換 。所有現有的AOSP用戶必須能夠使用修改後的共享庫而無需重新編譯。此要求意味著:

  • 不得刪除AOSP功能。
  • 如果此類結構向用戶公開,則不得對其進行更改。
  • 功能的前提條件不能加強。
  • 功能必須提供等效的功能。
  • 功能的後置條件不能弱化。

擴展模塊分類

根據模塊定義使用的功能對其進行分類。

注意 :此處使用功能代替API / ABI,因為可以在不更改任何API / ABI的情況下添加功能。

根據模塊中定義的功能,模塊可以分為DA-ModuleDX-Module

  • 僅定義AOSP模塊(DA-Module)未定義AOSP對應版本中沒有的新功能。
    • 示例1.完整的未經修改的AOSP庫是DA模塊。
    • 示例2.如果供應商使用SIMD指令重寫了libcrypto.so的功能(沒有添加新功能),則修改後的libcrypto.so將成為DA模塊。
  • 定義擴展模塊(DX-Module)定義了新功能,或者沒有AOSP對應物。
    • 示例1.如果供應商在libjpeg.so添加了一個輔助函數以訪問某些內部數據,則修改後的libjpeg.so將是DX-Lib,而新添加的函數將是該庫的擴展部分。
    • 示例2.如果供應商定義了一個名為libfoo.so的非AOSP庫,則libfoo.so將是DX-Lib。

根據模塊使用的功能,模塊可以分為UA-ModuleUX-Module

  • 僅使用AOSP模塊(UA-Module)在其實現中僅使用AOSP功能。他們不依賴任何非AOSP擴展。
    • 示例1.完整的未經修改的AOSP庫是UA-Module。
    • 示例2.如果修改後的共享庫libjpeg.so僅依賴於其他AOSP API,則它將是UA-Module。
  • 使用擴展模塊(UX-Module)在其實現中依賴於某些非AOSP功能。
    • 示例1.如果修改後的libjpeg.so依賴於另一個名為libjpeg_turbo2.so非AOSP庫,那麼修改後的libjpeg.so將是一個UX-Module。
    • 實施例2如果供應商增加了一個新的功能,以它們的改性libexif.so和它們的改性libjpeg.so用途新添加的從功能libexif.so ,然後它們的改性libjpeg.so將是一個UX-模塊。

定義和用法彼此獨立:

二手功能
僅AOSP(UA) 擴展(UX)
定義的功能僅AOSP(DA) 達阿達克斯
擴展(DX) DXUA DXUX

VNDK擴展機制

依賴擴展功能的供應商模塊將無法工作,因為具有相同名稱的AOSP庫沒有擴展功能。如果供應商模塊直接或間接依賴於擴展功能,則供應商應將DAUX,DXUA和DXUX共享庫複製到供應商分區(供應商進程始終首先在供應商分區中尋找共享庫)。但是,不得複制LL-NDK庫,因此供應商模塊不得依賴於經修改的LL-NDK庫定義的擴展功能。

如果相應的AOSP庫可以提供相同的功能,並且當系統分區被通用系統映像(GSI)覆蓋時,供應商模塊可以繼續工作,則DAUA共享庫可以保留在系統分區上。

插入替換非常重要,因為在發生名稱衝突時,GSI中未修改的VNDK庫將與修改後的共享庫鏈接。如果以不兼容的API / ABI方式修改AOSP庫,則GSI中的AOSP庫可能無法鏈接或導致未定義的行為。