Yerel kitaplıklar için ad alanları

Android 7.0, dahili API'yi sınırlandırmak amacıyla yerel kitaplıklar için ad alanları kullanıma sundu uygulamaların yanlışlıkla platformu kullandığı görünürlük ve durumları çözme kendi kitaplığını yükleyebilirsiniz. Daha fazla bilgi için İyileştirme Android 7.0'da Özel C/C++ Sembol Kısıtlamalarıyla Kararlılık Android Uygulamaya özel değişiklikler için geliştirici blog yayını.

Mimari

Android 7.0 ve sonraki sürümlerde, sistem kitaplıkları uygulama kitaplıklarından ayrılır.

Yerel kitaplıklar için ad alanları

Şekil 1. Yerel kitaplıklar için ad alanları.

Yerel kitaplıklar için ad alanları, uygulamaların özel platformda yerel olarak kullanmasını engeller API'ler (OpenSSL ile yapıldığı gibi). Ayrıca uygulamaların, tanık olduğu gibi, yanlışlıkla kendi platform kitaplıklarını kullanmak yerine libpng ile birlikte). Uygulama kitaplıklarının dahili içeriği kullanması zor sistem kitaplıklarına neden olabilir (veya bunun tersi de geçerlidir).

Daha fazla yerel kitaplık ekleme

Standart herkese açık yerel kitaplıkların yanı sıra silikon satıcıları (Android 7.0'dan itibaren) ve cihaz üreticileri (Android 9'dan itibaren) ek yerel kitaplıklar sağlamayı tercih edebilirler ilgili kitaplık klasörlerinin altına koyup bunları açık bir şekilde listeleyerek uygulamalar tarafından erişilebilir inceleyebilirsiniz.

Kitaplık klasörleri şunlardır:

  • /vendor/lib (32 bit için) ve /vendor/lib64 (64 bit için) silikon tedarikçilerinin kütüphaneleri için
  • /system/lib (32 bit için) ve /system/lib64 (64 bit için) cihaz üreticilerinin kitaplıkları için

.txt dosyaları:

  • Silikon tedarikçilerinin kütüphaneleri için /vendor/etc/public.libraries.txt
  • Cihaz üreticilerinin kitaplıkları için /system/etc/public.libraries-COMPANYNAME.txt, burada COMPANYNAME, üreticinin bir adını (örneğin, awesome.company). COMPANYNAME şununla eşleşmelidir: [A-Za-z0-9_.-]+; alfanümerik karakterler, _, . (nokta) ve -. Bu sayede bazı kitaplıklar harici çözümden ise bir cihazda bunun gibi birden çok .txt dosyasına sahip olma sağlayıcılar.

system bölümündeki, cihaz üreticileri tarafından herkese açık hale getirilen yerel kitaplıklar Adı lib*COMPANYNAME.so ZORUNLUDUR. Örneğin, libFoo.awesome.company.so. Diğer bir deyişle, şirket adı son eki olmayan libFoo.so HERKESE AÇIK YAPILMAMALIDIR. Kitaplık dosya adındaki COMPANYNAME,COMPANYNAME .txt dosyasının adını girin.

AOSP'nin bir parçası olan yerel kitaplıklar herkese açık OLMAMALIDIR (standart varsayılan olarak herkese açık olan yerel halk kütüphaneleri) gerekir. Yalnızca silikon tedarikçilerinin veya cihaz üreticilerinin uygulamaları için erişilebilir olmasını sağlayabilirsiniz.

Satıcının halk kütüphanelerinde Android 8.0'dan itibaren aşağıdaki ek özellikler bulunur kısıtlamalar ve gerekli kurulumlar:

  1. Tedarikçi firmadaki yerel kitaplığın düzgün şekilde etiketlenmesi gerekir. erişilebilir hale getirebilirsiniz. Herhangi bir uygulama (üçüncü taraf uygulamaları dahil) taraf uygulamaları) kullanıyorsanız kitaplık same_process_hal_file olarak etiketlenmelidir. tedarikçi firmaya özel bir file_contexts dosyasında aşağıdaki gibi bulun:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    Burada libnative.so, yerel kitaplığın adıdır.
  2. Kitaplık, bağımlılıkları üzerinden doğrudan veya geçişli olarak VNDK-SP ve LLNDK kitaplıkları dışındaki sistem kitaplıklarına bağlıdır. VNDK-SP ve LLNDK kitaplıkları development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv

Satıcının herkese açık kitaplıkları, Android 15'ten itibaren tedarikçi firma APEX'i inceleyin. Tedarikçi firma APEX'te paketlendiğinde kitaplıkları listeleyin APEX manifestindeki bir provideNativeLibs mülkünde yer alır.

Uygulamaları, herkese açık olmayan yerel kitaplıkları kullanmayacak şekilde güncelleme

Bu özellik yalnızca SDK 24 veya sonraki bir sürümü hedefleyen uygulamalar için etkinleştirilir; geriye dönük uyumluluk için bkz. Tablo 1.Uygulamanız özel yerel kitaplıklara bağlantı veriyorsa ne olur? Uygulamalar tarafından erişilebilen Android yerel kitaplıklarının listesi ( halka açık yerel kütüphaneler) CDD bölümünde 3.1.1'de listelenmektedir. 24 veya üzerini hedefleyen uygulamalar sonradan herkese açık olmayan kitaplıklar kullanılıyorsa güncellenmelidir. Bkz. NDK Daha fazla bilgi için Platform Kitaplıklarına Bağlanan Uygulamalar bölümüne bakın.

Yerel kitaplık bağımlılıkları için uygulamaları güncelleme

SDK 31 (Android 12) veya sonraki sürümleri hedefleyen uygulamalar kullanarak aşağıdaki yerel paylaşılan kitaplık bağımlılıklarını açıkça belirtme <uses-native-library> etiketi. İstenen kısmın cihazda yoksa uygulama yüklü değil. Uygulamalar yüklendiğinde yalnızca istedikleri yerel paylaşılan kitaplıklarla sağlanır. Bunun anlamı, uygulamalar, uygulama manifestinde görünmeyen paylaşılan yerel kitaplıklara erişemez.