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ı, 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
, buradaCOMPANYNAME
, ü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:
- 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 birfile_contexts
dosyasında aşağıdaki gibi bulun:/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
Buradalibnative.so
, yerel kitaplığın adıdır. - 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.