Android 7.0, dahili API görünürlüğünü sınırlamak ve uygulamaların yanlışlıkla kendi platform kitaplıkları yerine platform kitaplıklarını kullandığı 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ığı Artırma bölümüne bakın.
Mimari
Android 7.0 ve sonraki sürümlerde, sistem kitaplıkları uygulama kitaplıklarından ayrılır.

Şekil 1. Yerel kitaplıklar için ad alanları
Yerel kitaplıklar için ad alanları, uygulamaların özel platform yerel API'lerini kullanmasını engeller (OpenSSL'de olduğu gibi). Ayrıca, uygulamaların yanlışlıkla kendi platform kitaplıkları yerine platform kitaplıklarını kullandığı durumları da ortadan kaldırır ( libpng
ile tanık olunduğu gibi). Uygulama kitaplıklarının dahili sistem kitaplıklarını kazara kullanması zordur (ve tersi).
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 itibaren) ilgili kitaplık klasörlerinin altına yerleştirerek ve açıkça .txt dosyasında listeleyerek uygulamalar için erişilebilir ek yerel kitaplıklar sağlamayı seçebilir. Dosyalar.
Kütüphane klasörleri şunlardır:
-
/vendor/lib
(32-bit için) ve/vendor/lib64
(64-bit için) silikon satıcılarının kitaplıkları için -
/system/lib
(32 bit için) ve/system/lib64
(64 bit için) aygıt üreticilerinin kitaplıkları için
.txt dosyaları şunlardır:
- silikon satıcılarından kitaplıklar için
/vendor/etc/public.libraries.txt
-
/system/etc/public.libraries-COMPANYNAME.txt
, cihaz üreticilerine ait kitaplıklar için,COMPANYNAME
üreticinin adını ifade eder (awesome.company
gibi).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.
Cihaz üreticileri tarafından herkese açık hale getirilen system
bölümündeki yerel kitaplıklar, lib*COMPANYNAME.so
olarak adlandırılmalıdır, libFoo.awesome.company.so
. Başka bir deyişle, şirket adı son eki olmadan libFoo.so
herkese açık YAPILMAMALIDIR. COMPANYNAME
dosya adındaki ŞİRKET ADI, kitaplık adının listelendiği txt dosyası adındaki COMPANYNAME
ile eşleşmelidir ZORUNLU.
AOSP'nin parçası olan yerel kitaplıklar herkese açık YAPILMAMALIDIR (varsayılan olarak herkese 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'dan başlayarak, satıcı genel kitaplıklarında aşağıdaki ek kısıtlamalar ve gerekli kurulumlar bulunur:
- Satıcıdaki yerel kitaplık, uygulamalar tarafından erişilebilir olması için uygun şekilde etiketlenmelidir. Herhangi bir uygulama (üçüncü taraf uygulamalar dahil) için erişim gerekiyorsa, kitaplık satıcıya özel bir
file_contexts
dosyasındasame_process_hal_file
olarak etiketlenmelidir:/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 LLNDK kitaplıkları dışındaki sistem kitaplıklarına bağlı olmamalıdır.
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
adresinde VNDK-SP ve LLNDK kitaplıklarının listesini bulun.
Uygulamaları herkese açık olmayan yerel kitaplıkları kullanmayacak şekilde güncelleme
Bu özellik yalnızca SDK 24 veya sonraki sürümünü hedefleyen uygulamalar için etkinleştirilmiştir; geriye dönük uyumluluk için bkz. Tablo 1. Uygulamanız özel yerel kitaplıklara bağlanıyorsa ne beklenir . 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 daha yenisini 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.
Yerel kitaplık bağımlılıkları için uygulamaları güncelleme
SDK 31 (Android 12) veya sonraki sürümünü hedefleyen uygulamalar, uygulama bildiriminde <uses-native-library>
etiketini kullanarak yerel paylaşılan kitaplık bağımlılıklarını açıkça belirtmelidir . İstenen kitaplığın herhangi bir parçası cihazda yoksa uygulama yüklenmez. Uygulamalar yüklendiğinde, yalnızca talep ettikleri 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.