Yerel Kitaplıklar için Ad Alanları

Android 7.0, dahili API görünürlüğünü sınırlamak ve uygulamaların yanlışlıkla kendi platform kitaplıklarını kullanmak yerine yanlışlıkla platform kitaplıklarını kullanmaya başladığı durumları çözmek için yerel kitaplıklar için ad alanları sundu. Uygulamaya özel değişiklikler için Android 7.0 Android Geliştiricileri blog gönderisinde Özel C / C ++ Sembol Kısıtlamalarıyla Kararlılığı İyileştirme konusuna bakın.

Mimari

Değişiklik, sistem kitaplıklarını uygulama kitaplıklarından ayırır ve kazara dahili sistem kitaplıklarının kullanılmasını zorlaştırır (ve bunun tersi de geçerlidir).

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 platform yerel API'lerini (OpenSSL ile yapıldığı gibi) kullanmasını engeller. Ayrıca, uygulamaların yanlışlıkla kendi platformları yerine platform kitaplıklarını kullandığı durumları ortadan kaldırır ( libpng görüldüğü gibi).

Ek yerel kitaplıklar ekleme

Standart genel yerel kitaplıklara ek olarak, silikon satıcıları (Android 7.0'dan başlayarak) ve cihaz üreticileri (Android 9'dan başlayarak), bunları ilgili kitaplık klasörlerinin altına koyarak ve açıkça .txt biçiminde listeleyerek uygulamalar için erişilebilir ek yerel kitaplıklar sağlamayı seçebilir Dosyalar.

Kitaplık klasörleri şunlardır:

  • Silikon satıcılarından kitaplıklar için /vendor/lib (32-bit için) ve /vendor/lib64 (64-bit için)
  • Aygıt üreticilerinden kitaplıklar için /system/lib (32-bit için) ve /system/lib64 (64-bit için)

.Txt dosyaları şunlardır:

  • Silikon satıcılarından kitaplıklar için /vendor/etc/public.libraries.txt
  • Cihaz üreticilerinin kitaplıkları için /system/etc/public.libraries-COMPANYNAME.txt ; burada COMPANYNAME , üreticinin adını belirtir (örneğin, awesome.company ). COMPANYNAME , [A-Za-z0-9_.-]+ ile eşleşmelidir; alfanümerik karakterler, _, . (nokta) ve -. Bazı kitaplıklar harici çözüm sağlayıcılardan geliyorsa, bir cihazda bu tür birden çok .txt dosyası olması mümkündür.

Yerli kütüphaneler system cihaz üreticileri tarafından kamu yapılır bölüm adlandırılacak GEREKİR lib*COMPANYNAME.so örneğin, libFoo.awesome.company.so . Diğer bir deyişle, şirket adı soneki olmadan libFoo.so herkese açık hale getirilmemelidir. COMPANYNAME kitaplık dosya adında ile eşleşmesi MUTLAKA COMPANYNAME kütüphane adı listede olduğu txt dosya adında.

AOSP'nin parçası olan yerel kitaplıklar herkese açık hale getirilmemelidir (varsayılan olarak halka açık olan standart genel yerel kitaplıklar hariç). Yalnızca silikon satıcıları veya cihaz üreticileri tarafından eklenen ek kitaplıklar, uygulamalar için erişilebilir hale getirilebilir.

Android 8.0 sürümünden itibaren, satıcı genel kitaplıkları aşağıdaki ek kısıtlamalara ve gerekli kurulumlara sahiptir:

  1. Satıcıdaki yerel kitaplığın, uygulamalar tarafından erişilebilir olması için doğru şekilde etiketlenmesi gerekir. Herhangi bir uygulama için erişim gerekiyorsa (üçüncü taraf uygulamalar dahil), kitaplık, satıcıya özgü file_contexts dosyasında aşağıdaki gibi same_process_hal_file olarak etiketlenmelidir:
    /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, doğrudan veya bağımlılıkları aracılığıyla geçişli olarak, VNDK-SP ve LLNDK kitaplıkları dışındaki sistem kitaplıklarına bağlı olmamalıdır. VNDK-SP ve LLNDK kitaplıklarının listesi, development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

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

Bu özellik yalnızca SDK sürüm 24 veya üzerini hedefleyen uygulamalar için etkinleştirilmiştir; geriye dönük uyumluluk için Tablo 1'e bakın . Uygulamanız özel yerel kitaplıklara bağlanıyorsa ne olur ? Uygulamalar tarafından erişilebilen Android yerel kitaplıklarının listesi (genel yerel kitaplıklar olarak da bilinir) CDD bölüm 3.1.1'de listelenmiştir. 24 veya sonrasını hedefleyen ve herkese açık olmayan kitaplıkları kullanan uygulamalar güncellenmelidir. Daha fazla ayrıntı için Platform Kitaplıklarına Bağlanan NDK Uygulamaları'na bakın.