Android 7.0, dahili API görünürlüğünü sınırlamak ve uygulamaların yanlışlıkla kendi kitaplıkları yerine platform kitaplıklarını kullandığı durumları çözmek için yerel kitaplıklara yönelik ad alanları sundu. Uygulamaya özel değişiklikler için Android 7.0 Android Geliştiricileri blog gönderisindeki Özel C/C++ Sembol Kısıtlamalarıyla Kararlılığın Artırılması bölümüne bakın.
Mimari
Android 7.0 ve sonraki sürümlerde sistem kitaplıkları uygulama kitaplıklarından ayrılmıştır.
![Yerel kitaplıklar için ad alanları](https://source.android.com/static/docs/core/permissions/images/namespace-libraries.png?authuser=6&hl=tr)
Şekil 1. Yerel kütüphaneler için ad alanları
Yerel kitaplıklara yönelik ad alanları, uygulamaların özel platform yerel API'lerini kullanmasını engeller (OpenSSL'de yapıldığı gibi). Ayrıca uygulamaların yanlışlıkla kendi kitaplıkları yerine platform kitaplıklarını kullandığı durumları da ortadan kaldırır ( libpng
görüldüğü gibi). Uygulama kitaplıklarının dahili sistem kitaplıklarını kazara kullanması (veya tam tersi) zordur.
Ek yerel kitaplıklar ekleme
Standart genel yerel kitaplıklara ek olarak, silikon satıcıları (Android 7.0'dan itibaren) ve cihaz üreticileri (Android 9'dan başlayarak), ilgili kitaplık klasörlerinin altına yerleştirerek ve bunları .txt dosyasında açıkça listeleyerek uygulamalar tarafından erişilebilen ek yerel kitaplıklar sağlamayı seçebilir. Dosyalar.
Kütüphane klasörleri şunlardır:
- Silikon satıcılarının kitaplıkları için
/vendor/lib
(32 bit için) ve/vendor/lib64
(64 bit için) - Cihaz üreticilerinin 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ının kütüphaneleri için
/vendor/etc/public.libraries.txt
- Cihaz üreticilerinin kitaplıkları için
/system/etc/public.libraries-COMPANYNAME.txt
; buradaCOMPANYNAME
ü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ın harici çözüm sağlayıcılara ait olması durumunda, bir aygıtta bu tür birden fazla .txt dosyasının bulunması mümkündür.
Cihaz üreticileri tarafından genel kullanıma sunulan system
bölümündeki yerel kitaplıkların lib*COMPANYNAME.so
olarak adlandırılması GEREKİR ; örneğin, libFoo.awesome.company.so
. Başka bir deyişle, şirket adı son eki olmayan libFoo.so
kamuya açıklanmamalıdır. Kütüphane dosya adındaki COMPANYNAME
kütüphane adının listelendiği txt dosyası adındaki COMPANYNAME
ADI ile eşleşmelidir ZORUNLU.
AOSP'nin parçası olan yerel kütüphaneler herkese açık hale getirilmemelidir ZORUNLU (varsayılan olarak herkese açık olan standart genel yerel kütüphaneler hariç). Yalnızca silikon satıcıları veya cihaz üreticileri tarafından eklenen ek kitaplıklar uygulamalara erişilebilir hale getirilebilir.
Android 8.0'dan itibaren satıcı genel kitaplıkları aşağıdaki ek kısıtlamalara ve gerekli ayarlara sahiptir:
- Satıcıdaki yerel kitaplığın, uygulamalar tarafından erişilebilmesi için uygun şekilde etiketlenmesi gerekir. Herhangi bir uygulama için erişim gerekiyorsa (üçüncü taraf uygulamalar dahil), kitaplığın satıcıya özel bir
file_contexts
dosyasında aşağıdaki şekildesame_process_hal_file
olarak etiketlenmesi gerekir:/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
buradalibnative.so
yerel kitaplığın adıdır. - Kitaplık, doğrudan veya bağımlılıkları aracılığıyla geçişli olarak, VNDK-SP ve LLLNDK kitaplıkları dışındaki sistem kitaplıklarına bağlı olmamalıdır. VNDK-SP ve LLNDK kitaplıklarının listesini
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
bulun.
Android 15'ten (AOSP deneysel) başlayarak, satıcı genel kitaplıkları bir satıcı APEX'ine yerleştirilebilir. Bir satıcı APEX'inde paketlendiğinde, kitaplıkları APEX bildirimindeki bir provideNativeLibs
özelliğinde listeleyin.
Uygulamaları, herkese açık olmayan yerel kitaplıkları kullanmayacak şekilde güncelleme
Bu özellik yalnızca SDK sürüm 24 veya üstünü hedefleyen uygulamalar için etkinleştirilir; Geriye dönük uyumluluk için Tablo 1'e bakın. Uygulamanız özel yerel kitaplıklara bağlantı veriyorsa neler beklenebilir ? Uygulamaların erişebildiği 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 sonraki sürümleri hedefleyen ve herkese açık olmayan kitaplıkları kullanan uygulamalar güncellenmelidir. Daha fazla ayrıntı için Platform Kitaplıklarına Bağlantı Veren NDK Uygulamalarına bakın.
Uygulamaları yerel kitaplık bağımlılıklarına göre güncelleme
SDK sürüm 31 (Android 12) veya üstünü hedefleyen uygulamaların, uygulama bildirimindeki <uses-native-library>
etiketini kullanarak yerel paylaşılan kitaplık bağımlılıklarını açıkça belirtmesi gerekir. İstenilen kitaplığın herhangi bir kısmı cihazda mevcut değilse uygulama yüklenmemiştir. Uygulamalar yüklendiğinde yalnızca istedikleri yerel paylaşılan kitaplıklar sağlanır. Bu, uygulamaların, uygulama bildiriminde görünmeyen yerel paylaşılan kitaplıklara erişemeyeceği anlamına gelir.