Android 7.0, dahili API görünürlüğünü sınırlamak ve uygulamaların kendi kitaplıkları yerine yanlışlıkla platform kitaplıklarını kullandığı durumları çözmek için yerel kitaplıklara yönelik ad alanları sunmuştur. Uygulamaya özel değişiklikler için Android 7.0'da Özel C/C++ Sembol Kısıtlamalarıyla Kararlılığı Artırma başlıklı Android Developers blog yayınını inceleyin.
Mimari
Android 7.0 ve sonraki sürümlerde sistem kitaplıkları, uygulama kitaplıklarından ayrılır.

1. şekil. Yerel kitaplıklar için ad alanları.
Yerel kitaplıklar için ad alanları, uygulamaların özel platforma ait yerel API'leri kullanmasını engeller (OpenSSL'de olduğu gibi). Ayrıca, uygulamaların kendi kitaplıkları yerine yanlışlıkla platform kitaplıklarını kullandığı durumları da ortadan kaldırır (libpng
ile görüldüğü gibi). Uygulama kitaplıklarının yanlışlıkla dahili sistem kitaplıklarını kullanması (veya bunun tersi) zordur.
Ek yerel kitaplıklar ekleme
Silikon satıcıları (Android 7.0'dan itibaren) ve cihaz üreticileri (Android 9'dan itibaren), standart herkese açık yerel kitaplıklara ek olarak, uygulamaların erişebileceği ek yerel kitaplıklar sağlamayı tercih edebilir. Bu kitaplıklar, ilgili kitaplık klasörlerine yerleştirilerek ve .txt dosyalarında açıkça listelenerek sağlanır.
Kitaplık 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 tedarikçilerinin kitaplıkları için
/vendor/etc/public.libraries.txt
- Cihaz üreticilerinin kitaplıkları için
/system/etc/public.libraries-COMPANYNAME.txt
, buradaCOMPANYNAME
, üreticinin adını (ör.awesome.company
) ifade eder.COMPANYNAME
,[A-Za-z0-9_.-]+
ile eşleşmelidir; alfanümerik karakterler, _, . (nokta) ve - karakterlerini içermelidir. Bazı kitaplıklar harici çözüm sağlayıcılardan geliyorsa bir cihazda birden fazla bu tür .txt dosyası olabilir.
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. Örneğin, libFoo.awesome.company.so
. ZORUNLU
Diğer bir deyişle, şirket adı soneki olmadan libFoo.so
herkese açık HALE GETİRİLMEMELİDİR.
Kitaplık dosya adındaki COMPANYNAME
, kitaplık adının listelendiği txt dosya adındaki COMPANYNAME
ile eşleşmelidir.
AOSP'nin parçası olan yerel kitaplıklar herkese açık HALE GETİRİLMEMELİDİR (varsayılan olarak herkese açık olan standart herkese açık yerel kitaplıklar hariç). Yalnızca silikon satıcıları veya cihaz üreticileri tarafından eklenen ek kitaplıklar uygulamalara erişilebilir hâle getirilebilir.
Android 8.0'dan itibaren, tedarikçi herkese açık kitaplıkları için aşağıdaki ek kısıtlamalar ve gerekli kurulumlar geçerlidir:
- Tedarikçideki yerel kitaplık, uygulamaların erişebilmesi için düzgün şekilde etiketlenmelidir. Kitaplığa herhangi bir uygulama (üçüncü taraf uygulamaları dahil) tarafından erişilmesi gerekiyorsa kitaplık, satıcıya özel bir
file_contexts
dosyasında aşağıdaki gibisame_process_hal_file
olarak etiketlenmelidir: burada/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
libnative.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. VNDK-SP ve LLNDK kitaplıklarının listesini
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
adresinde bulabilirsiniz.
Android 15'ten itibaren, tedarikçiye ait herkese açık kitaplıklar vendor APEX'e yerleştirilebilir. Bir satıcı APEX'inde paketlendiğinde, kitaplıkları APEX manifestindeki 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 sonraki sürümleri hedefleyen uygulamalarda etkinleştirilir. Geriye dönük uyumluluk için Tablo 1'e bakın. Uygulamanız özel yerel kitaplıklara bağlanıyorsa ne olur? Uygulamaların erişebildiği Android yerel kitaplıklarının listesi (aynı zamanda genel yerel kitaplıklar olarak da bilinir) CDD bölüm 3.1.1'de yer alır. 24 veya daha sonraki sürümleri hedefleyen ve herkese açık olmayan kitaplıkları kullanan uygulamalar güncellenmelidir. Daha fazla bilgi için NDK Apps Linking to Platform Libraries başlıklı makaleyi inceleyin.
Uygulamaları yerel kitaplık bağımlılıkları için güncelleme
SDK sürümü 31'i (Android 12) veya daha yeni bir sürümü hedefleyen uygulamalar, uygulama manifestinde <uses-native-library>
etiketini kullanarak yerel paylaşılan kitaplık bağımlılıklarını açıkça belirtmelidir. İstenen kitaplığın herhangi bir bölümü cihazda yoksa uygulama yüklenmez. Uygulamalar yüklendiğinde, yalnızca istedikleri yerel paylaşılan kitaplıklar sağlanır. Bu, uygulamaların, uygulama manifestinde görünmeyen yerel paylaşılan kitaplıklara erişemeyeceği anlamına gelir.