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ştirilenlibcrypto.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ımlarsalibfoo.so
bir DX-Lib olur.
- 1.örnek Bir tedarikçi, bazı dahili verilere erişmek için
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.
- 1.örnek Değiştirilmiş bir
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.