VNDK uzantıları

Android cihaz üreticileri, çeşitli nedenlerle AOSP kitaplıklarının kaynak kodunu değiştirir. Bazı tedarikçiler, performansı artırmak için AOSP kitaplıklarında işlevleri yeniden uygularken diğer tedarikçiler AOSP kitaplıklarına yeni kancalar, yeni API'ler veya yeni işlevler ekler. Bu bölümde, AOSP kitaplıklarını CTS/VTS'yi ihlal etmeyecek şekilde genişletmeyle ilgili yönergeler sağlanmaktadır.

Yerine takma

Değiştirilen tüm paylaşılan kitaplıklar, AOSP eşdeğerlerinin ikili uyumlu, yerine yerleştirilebilir değişimleri olmalıdır. Mevcut tüm AOSP kullanıcıları, değiştirilmiş paylaşılan kitaplığı yeniden derlemeden kullanabilmelidir. Bu şart aşağıdakileri ifade eder:

  • AOSP işlevleri kaldırılmamalıdır.
  • Bu tür yapılar kullanıcılarına gösteriliyorsa yapılarda değişiklik yapılmamalıdır.
  • İşlevlerin ön koşulu güçlendirilmemelidir.
  • İşlevler eşdeğer işlevler sağlamalıdır.
  • İşlevlerin son koşulu zayıflatılmamalıdır.

Genişletilmiş modül sınıflandırmaları

Modülleri, tanımladıkları ve kullandıklarına göre sınıflandırın.

Not: API/ABI yerine burada işlevler kullanılmaktadır. Bunun nedeni, API/ABI değiştirilmeden işlev eklemenin mümkün olmasıdır.

Modüller, bir modülde tanımlanan işlevlere bağlı olarak DA-Modülü ve DX-Modülü olarak sınıflandırılabilir:

  • Yalnızca AOSP modüllerini tanımlama (DA modülü), AOSP karşılığında olmayan yeni işlevleri tanımlamaz.
    • 1.örnek Değiştirilmemiş bir AOSP kitaplığı DA modülüdür.
    • 2.örnek Bir tedarikçi, libcrypto.so'teki işlevleri SIMD talimatlarıyla yeniden yazarsa (yeni işlev eklemeden) değiştirilen libcrypto.so bir DA modülü olur.
  • Tanımlayıcı Uzatma Modülleri (DX-Modülü), yeni işlevler tanımlar veya AOSP eşdeğeri yoktur.
    • 1.örnek Bir tedarikçi, bazı dahili verilere erişmek için libjpeg.so'e yardımcı işlev eklerse değiştirilmiş libjpeg.so bir DX-Lib olur ve yeni eklenen işlev, kitaplığın genişletilmiş kısmı olur.
    • 2.örnek Bir satıcı libfoo.so adlı AOSP dışı bir kitaplık tanımlarsa libfoo.so bir DX-Lib olur.

Modüller, kullandıkları işlevlere bağlı olarak UA-modülü ve UX-modülü olarak sınıflandırılabilir.

  • Yalnızca AOSP Modüllerini Kullanan (UA-Modülü) uygulamalar, uygulamalarında yalnızca AOSP işlevlerini kullanır. AOSP dışındaki uzantılara ihtiyaç duymazlar.
    • 1.örnek Değiştirilmemiş bir AOSP kitaplığı bir UA modülüdür.
    • 2.örnek Değiştirilmiş bir paylaşılan kitaplık libjpeg.so yalnızca diğer AOSP API'lerini kullanıyorsa UA modülü olur.
  • Uzantı Modüllerini Kullanma (UX-Modülü), uygulamalarında AOSP dışındaki bazı işlevlere dayanır.
    • 1.örnek Değiştirilmiş bir libjpeg.so, libjpeg_turbo2.so adlı AOSP dışı başka bir kitaplığa dayanıyorsa değiştirilmiş libjpeg.so bir UX modülü olur.
    • 2.örnek Bir tedarikçi, değiştirilmiş libexif.so'üne yeni bir işlev eklerse ve değiştirilmiş libjpeg.so'ü, libexif.so'ten yeni eklenen işlevi kullanırsa değiştirilmiş libjpeg.so bir UX modülü olur.

Tanımlamalar ve kullanımlar birbirinden bağımsızdır:

Kullanılan İşlevler
Yalnızca AOSP (UA) Genişletilmiş (UX)
Tanımlanmış İşlevler Yalnızca AOSP (DA) DAUA DAUX
Genişletilmiş (DX) DXUA DXUX

VNDK uzantı mekanizması

Aynı ada sahip AOSP kitaplığında genişletilmiş işlev olmadığı için genişletilmiş işlevlere dayanan tedarikçi modülleri çalışmaz. Tedarikçi firma modülleri doğrudan veya dolaylı olarak genişletilmiş işlevlere bağlıysa tedarikçi firmalar DAUX, DXUA ve DXUX paylaşılan kitaplıklarını tedarikçi firma bölümüne kopyalamalıdır (tedarikçi firma işlemleri her zaman önce tedarikçi firma bölümünde paylaşılan kitaplıkları arar). Ancak LL-NDK kitaplıkları kopyalanamaz. Bu nedenle, tedarikçi modülleri, değiştirilmiş LL-NDK kitaplıkları tarafından tanımlanan genişletilmiş işlevlere dayanmamalıdır.

İlgili AOSP kitaplığı aynı işlevi sağlayabiliyorsa ve sistem bölümünün üzerine Genel Sistem Görüntüsü (GSI) yazıldığında tedarikçi modülleri çalışmaya devam ediyorsa DAUA paylaşılan kitaplıkları sistem bölümünde kalabilir.

GSI'deki değiştirilmemiş VNDK kitaplıkları, ad çakışması durumunda değiştirilmiş paylaşılan kitaplıklarla bağlantı kuracağı için doğrudan değiştirme önemlidir. AOSP kitaplıkları API/ABI uyumsuz bir şekilde değiştirilirse GSI'deki AOSP kitaplıkları bağlanamayabilir veya tanımlanmamış davranışlara neden olabilir.