SDK olmayan arayüzlerle ilgili kısıtlamalar

Android 9'dan (API düzeyi 28) itibaren platform, uygulamanızın hangi SDK dışı arayüzleri kullanabileceğini kısıtlar. Bu kısıtlamalar, bir uygulama SDK olmayan bir arayüze başvurduğunda veya yansıma ya da JNI kullanarak herkese açık kullanıcı adını almaya çalıştığında geçerli olur. Bu kısıtlamalar, kullanıcı ve geliştirici deneyimini iyileştirmek, kullanıcılar için kilitlenme ve geliştiriciler için acil durum kullanıma sunma risklerini azaltmak amacıyla uygulanmaktadır. Bu karar hakkında daha fazla bilgi için SDK Dışı Arayüzlerin Kullanımını Azaltarak Kararlılığı İyileştirme bölümüne bakın.

SDK ve SDK dışı arayüzler arasındaki farkları açıklama

Genel olarak, herkese açık SDK arayüzleri, Android çerçevesi Paket Dizini'nde belgelenen arayüzlerdir. SDK olmayan arayüzlerin işlenmesi, API'nin soyutladığı bir uygulama ayrıntısıdır. Bu nedenle bu arayüzler haber verilmeden değiştirilebilir.

Kilitlenmeleri ve beklenmedik davranışları önlemek için uygulamalar, SDK'daki sınıfların yalnızca resmi olarak belgelenmiş bölümlerini kullanmalıdır. Bu aynı zamanda, yansıma gibi mekanizmalar kullanarak bir sınıfla etkileşimde bulunduğunuzda SDK'da listelenmeyen yöntemlere veya alanlara erişmemeniz gerektiği anlamına gelir.

SDK olmayan API listeleri

Android'in her sürümünde SDK dışı diğer arayüzler kısıtlanmıştır. Bu kısıtlamaların sürüm iş akışınızı etkileyebileceğini biliyoruz. Bu nedenle, SDK dışı arayüzlerin kullanımını tespit edecek araçlara, bize geri bildirim gönderme fırsatına ve yeni politikaları planlayıp bunlara uyum sağlayacak zamana sahip olduğunuzdan emin olmak istiyoruz.

SDK olmayan arayüzlerin, geliştirme iş akışınız üzerindeki etkisini en aza indirmek için SDK dışı arayüzler, hedef alınan API düzeyine bağlı olarak kullanımlarının ne kadar sıkı bir şekilde kısıtlandığını tanımlayan listelere ayrılır. Bu listelerin her biri aşağıdaki tabloda açıklanmıştır:

Liste Kod etiketleri Açıklama
Engellenenler listesi
  • blocked
  • Kullanımdan kaldırıldı: blacklist
Uygulamanızın hedef API düzeyi ne olursa olsun kullanamayacağınız SDK olmayan arayüzler. Uygulamanız bu arayüzlerden birine erişmeye çalışırsa sistem bir hata verir.
Koşula bağlı olarak engellendi
  • max-target-x
  • Kullanımdan kaldırıldı: greylist-max-x

Android 9'dan (API düzeyi 28) itibaren her API düzeyinde, bir uygulama söz konusu API düzeyini hedeflediğinde kısıtlanan SDK olmayan arayüzler bulunur.

Bu listeler, bir uygulama listedeki SDK olmayan arayüzlere artık erişememeden önce uygulamanın hedefleyebileceği maksimum API düzeyi (max-target-x) ile etiketlenir. Örneğin, Android Pie'da engellenmemiş ancak Android 10'da engellenmiş bir SDK olmayan arayüz, max-target-p (greylist-max-p) listesinde yer almaktadır. Buradaki "p", Pie veya Android 9 (API düzeyi 28) anlamına gelir.

Uygulamanız hedef API düzeyiniz için kısıtlanmış bir arayüze erişmeye çalıştığında sistem, API, engellenenler listesindeymiş gibi davranır.

Desteklenmiyor
  • unsupported
  • Kullanımdan kaldırıldı: greylist
Kısıtlanmamış ve uygulamanızın kullanabileceği SDK olmayan arayüzler. Ancak bu arayüzlerin desteklenmediğini ve önceden bildirimde bulunulmaksızın değişebileceğini unutmayın. Bu arayüzler, gelecekteki Android sürümlerinde max-target-x listesinde koşullu olarak engellenecektir.
SDK
  • Hem public-api hem de sdk
  • Desteği sonlandırıldı: public-api ve whitelist
Ücretsiz olarak kullanılabilen ve artık resmi olarak belgelenen Android çerçevesi Paket Dizini kapsamında desteklenen arayüzler.
API'leri test et
  • test-api
Uyumluluk Test Paketi (CTS) aracılığıyla testi kolaylaştıran API'ler gibi dahili sistem testi için kullanılan arayüzler. Test API'leri SDK'nın bir parçası değildir. Android 11'den (API düzeyi 30) itibaren test API'leri engellenenler listesine eklenmiştir. Bu nedenle, hedef API seviyeleri ne olursa olsun uygulamaların bu API'leri kullanmalarına izin verilmez. Platformun API düzeyinden bağımsız olarak tüm test API'leri desteklenmez ve haber verilmeksizin değiştirilebilir.

Uygulamanızın hedef API düzeyine bağlı olarak bazı SDK olmayan arayüzleri kullanabilirsiniz. Ancak SDK olmayan herhangi bir yöntem veya alan kullanmak her zaman uygulamanızın bozulma riskine sahiptir. Uygulamanız SDK olmayan arayüzleri kullanıyorsa SDK arayüzlerine veya diğer alternatiflere taşıma planlamaya başlamanız gerekir. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmanın alternatifi bir seçenek bulamıyorsanız yeni bir herkese açık API isteğinde bulunmanız gerekir.

Bir arayüzün hangi listeye ait olduğunu belirleme

SDK olmayan arayüzlerin listeleri, platformun bir parçası olarak oluşturulur. Her bir Android sürümü hakkında bilgi edinmek için aşağıdaki bölümlere göz atın.

Android 15

Android 15 (API düzeyi 35) için, SDK dışı tüm arayüzleri ve bunlara karşılık gelen listelerini açıklayan aşağıdaki dosyayı indirebilirsiniz:

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9

Android 15'teki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 15'te SDK olmayan arayüz kısıtlamalarıyla ilgili güncellemeler bölümüne bakın.

Android 14

Android 14 (API düzeyi 34) için, SDK dışı tüm arayüzleri ve bunlara karşılık gelen listelerini açıklayan aşağıdaki dosyayı indirebilirsiniz:

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f

Android 14'teki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 14'te SDK olmayan arayüz kısıtlamalarıyla ilgili güncellemeler bölümüne bakın.

Android 13

Android 13 (API düzeyi 33) için, SDK olmayan tüm arayüzleri ve bunlara karşılık gelen listelerini açıklayan aşağıdaki dosyayı indirebilirsiniz:

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

Android 13'te koşullu olarak engellenen API'ler için önerilen herkese açık API alternatifleri de dahil olmak üzere Android 13'teki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 13'te SDK dışı arayüz kısıtlamalarıyla ilgili güncellemeler bölümünü inceleyin.

Android 12

Android 12 (API düzeyi 31) için, SDK olmayan tüm arayüzleri ve bunlara karşılık gelen listelerini açıklayan aşağıdaki dosyayı indirebilirsiniz:

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761

Android 12'de koşullu olarak engellenen API'ler için önerilen herkese açık API alternatifleri de dahil olmak üzere Android 12'deki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 12'deki değişiklikleri listeleme bölümüne bakın.

Android 11

Android 11 (API düzeyi 30) için SDK olmayan tüm arayüzleri ve bunlara karşılık gelen listelerini açıklayan aşağıdaki dosyayı indirebilirsiniz:

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

Android 11'de koşullu olarak engellenen API'ler için önerilen herkese açık API alternatifleri de dahil olmak üzere Android 11'deki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 11'deki değişiklikleri listeleme bölümüne bakın.

Android 10

Android 10 (API düzeyi 29) için SDK olmayan tüm arayüzleri ve bunlara karşılık gelen listelerini açıklayan aşağıdaki dosyayı indirebilirsiniz:

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

Android 10'da koşullu olarak engellenen API'ler için önerilen herkese açık API alternatifleri de dahil olmak üzere Android 10'daki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 10'daki değişiklikleri listeleme bölümüne bakın.

Android 9

Android 9 (API düzeyi 28) için aşağıdaki metin dosyasında, kısıtlanmamış (gri listede bulunan) SDK dışı API'lerin listesi yer alır: hiddenapi-light-greylist.txt.

Engellenenler listesi (blacklist) ve koşullu olarak engellenen API'lerin listesi (koyu gri liste) derleme sırasında türetilir.

AOSP'den liste oluşturma

AOSP ile çalışırken, SDK olmayan tüm arayüzleri ve bunlara karşılık gelen listelerini içeren bir hiddenapi-flags.csv dosyası oluşturabilirsiniz. Bunun için AOSP kaynağını indirin, ardından aşağıdaki komutu çalıştırın:

m out/soong/hiddenapi/hiddenapi-flags.csv

Ardından dosyayı aşağıdaki konumda bulabilirsiniz:

out/soong/hiddenapi/hiddenapi-flags.csv

Kısıtlanmış SDK dışı arayüzlere erişildiğinde beklenen davranış

Aşağıdaki tabloda, uygulamanız engellenenler listesindeki SDK dışı bir arayüze erişmeye çalışırsa karşılaşabileceğiniz davranışlar açıklanmaktadır.

Erişim araçları Sonuç
Bir alanı referans gösteren Dalvik talimatı NoSuchFieldError atıldı
Bir yöntemi referans alan Dalvik talimatı NoSuchMethodError atıldı
Class.getDeclaredField() veya Class.getField() kullanarak düşünme NoSuchFieldException atıldı
Class.getDeclaredMethod(), Class.getMethod() kullanarak düşünme NoSuchMethodException atıldı
Class.getDeclaredFields(), Class.getFields() kullanarak düşünme SDK olmayan üyeler sonuçlarda yer almıyor
Class.getDeclaredMethods(), Class.getMethods() kullanarak düşünme SDK olmayan üyeler sonuçlarda yer almıyor
env->GetFieldID() kullanılarak JNI NULL geri döndü, NoSuchFieldError atıldı
env->GetMethodID() kullanılarak JNI NULL geri döndü, NoSuchMethodError atıldı

Uygulamanızı SDK olmayan arayüzler için test etme

Uygulamanızdaki SDK olmayan arayüzleri test etmek için kullanabileceğiniz birkaç yöntem vardır.

Hata ayıklaması yapılabilir bir uygulama kullanarak test etme

Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran bir cihazda ya da emülatörde hata ayıklanabilir uygulama derleyip çalıştırarak SDK olmayan arayüzleri test edebilirsiniz. Kullandığınız cihazın veya emülatörün, uygulamanızın hedef API düzeyiyle eşleştiğinden emin olun.

Uygulamanızda testler çalıştırırken uygulamanız SDK olmayan belirli arayüzlere erişiyorsa sistem bir günlük mesajı yazdırır. Aşağıdaki ayrıntıları bulmak için uygulamanızın günlük mesajlarını inceleyebilirsiniz:

  • Tanımlayan sınıf, ad ve tür (Android çalışma zamanı tarafından kullanılan biçimde).
  • Erişim araçları: bağlama, yansıma kullanarak veya JNI kullanma.
  • SDK dışı arayüzün ait olduğu liste.

Çalışan uygulamanın PID'si altında görünen bu günlük mesajlarına erişmek için adb logcat kullanabilirsiniz. Örneğin, günlükteki bir giriş aşağıdaki gibi okunabilir:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

StrictMode API'sini kullanarak test etme

Ayrıca, StrictMode API'yi kullanarak SDK dışı arayüzleri test edebilirsiniz. Bunu etkinleştirmek için detectNonSdkApiUsage yöntemini kullanın. StrictMode API'yi etkinleştirdikten sonra, özel işleme uygulayabileceğiniz bir penaltyListener kullanarak SDK dışı arayüzün her kullanımı için geri çağırma alabilirsiniz. Geri çağırmada sağlanan Violation nesnesi, Throwable öğesinden türetilir ve ekteki yığın izleme, kullanım bağlamını sağlar.

Sürüm aracını kullanarak test etme

APK'nızda verdex statik analiz aracını da çalıştırabilirsiniz. Veridex aracı, üçüncü taraf kitaplıklar da dahil olmak üzere APK'nın tüm kod tabanını tarar ve bulduğu SDK olmayan arayüzlerin tüm kullanımlarını bildirir.

Veridex aracının sınırlamaları şunlardır:

  • Uygulama, JNI üzerinden yapılan çağrıları algılayamaz.
  • Yansıma yoluyla yalnızca bir çağrı alt kümesini algılayabilir.
  • Etkin olmayan kod yollarıyla ilgili analizi API düzeyindeki kontrollerle sınırlıdır.
  • Yalnızca SSE4.2 ve POPCNT talimatlarını destekleyen makinelerde çalıştırılabilir.

Windows

Yerel Windows ikili programları sağlanmamıştır ancak Linux için Windows Alt Sistemi (WSL) ile Linux ikili programlarını çalıştırarak Windows'da veridex aracını çalıştırabilirsiniz. Bu bölümdeki adımları uygulamadan önce WSL'yi yükleyin ve Linux dağıtımınız olarak Ubuntu'yu seçin.

Ubuntu yüklendikten sonra bir Ubuntu terminali başlatın ve şu adımları uygulayın:

  1. Android çalışma zamanı önceden oluşturulmuş deposundan veridex aracını indirin.
  2. appcompat.tar.gz dosyasının içeriğini çıkarın.
  3. Çıkarılan klasörde veridex-linux.zip dosyasını bulup çıkarın.
  4. Sıkıştırılmamış klasöre gidin ve aşağıdaki komutu çalıştırın. Buradaki your-app.apk, test etmek istediğiniz APK'dır:

    ./appcompat.sh --dex-file=your-app.apk
    

macOS

Veridex aracını macOS'te çalıştırmak için aşağıdaki adımları uygulayın:

  1. Android çalışma zamanı önceden oluşturulmuş deposundan veridex aracını indirin.
  2. appcompat.tar.gz dosyasının içeriğini çıkarın.
  3. Çıkarılan klasörde veridex-mac.zip dosyasını bulup çıkarın.
  4. Sıkıştırılmamış klasöre gidin ve aşağıdaki komutu çalıştırın. Burada /path-from-root/your-app.apk, test etmek istediğiniz APK'nın sisteminizin kök dizininden başlayarak yoludur:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

Linux

Linux'ta veridex aracını çalıştırmak için aşağıdaki adımları uygulayın:

  1. Android çalışma zamanı önceden oluşturulmuş deposundan veridex aracını indirin.
  2. appcompat.tar.gz dosyasının içeriğini çıkarın.
  3. Çıkarılan klasörde veridex-linux.zip dosyasını bulup çıkarın.
  4. Sıkıştırılmamış klasöre gidin ve aşağıdaki komutu çalıştırın. Buradaki your-app.apk, test etmek istediğiniz APK'dır:

    ./appcompat.sh --dex-file=your-app.apk
    

Android Studio lint aracını kullanarak test etme

Uygulamanızı Android Studio'da her derlediğinizde, lint aracı olası sorunlar için kodunuzu inceler. Uygulamanız SDK olmayan arayüzler kullanıyorsa bu arayüzlerin hangi listeye ait olduğuna bağlı olarak derleme hataları veya uyarıları görebilirsiniz.

Ayrıca lint aracını komut satırından çalıştırabilir veya belirli bir proje, klasör ya da dosyada incelemeleri manuel olarak çalıştırabilirsiniz.

Play Console'u kullanarak test etme

Uygulamanızı Play Console'da bir test kanalına yüklediğinizde, uygulamanız olası sorunlara karşı otomatik olarak test edilir ve lansman öncesi rapor oluşturulur. Uygulamanız SDK olmayan arayüzler kullanıyorsa lansman öncesi raporda bu arayüzlerin hangi listeye ait olduğuna bağlı olarak bir hata veya uyarı görüntülenir.

Daha fazla bilgi için Sorunları tanımlamak için lansman öncesi raporları kullanma başlıklı makalenin Android Uyumluluğu bölümüne bakın.

Yeni bir herkese açık API isteğinde bulunun

Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmaya alternatif bir yöntem bulamazsanız sorun izleyicimizde bir özellik isteği oluşturarak yeni bir herkese açık API isteğinde bulunabilirsiniz.

Özellik isteği oluştururken aşağıdaki bilgileri sağlayın:

  • Accessing hidden ... logcat mesajında görünen tam tanımlayıcı da dahil olmak üzere hangi desteklenmeyen API'yi kullandığınız.
  • Yalnızca alt seviyedeki ayrıntılar değil, API'nin gerekli olduğu üst düzey özellikle ilgili ayrıntılar da dahil olmak üzere bu API'leri neden kullanmanız gerektiği.
  • İlgili herkese açık SDK API'lerinin amaçlarınız için neden yeterli olmadığı
  • Denediğiniz diğer alternatifler ve işe yaramama nedenleri.

Bu ayrıntıları özellik isteğinizde sağladığınızda, yeni bir herkese açık API'ye izin verilme olasılığını artırırsınız.

Diğer sorular

Bu bölümde, geliştiricilerin sık sorduğu diğer soruların yanıtlarını bulabilirsiniz:

Genel sorular

Google, sorun izleyici aracılığıyla tüm uygulamaların ihtiyaçlarını yakalayabileceğinden nasıl emin olabilir?

Aşağıdaki yöntemler kullanılarak desteklenen uygulamaların statik analizi aracılığıyla Android 9 (API düzeyi 28) için ilk listeleri oluşturduk:

  • Play'deki ve Play dışındaki en popüler uygulamalar için manuel test
  • dahili raporlar
  • dahili kullanıcılardan otomatik veri toplama
  • geliştirici önizleme raporları
  • riskli bir şekilde daha fazla yanlış pozitif değeri dahil etmek üzere tasarlanmış ek statik analiz

Her yeni sürümün listelerini değerlendirirken hem API kullanımını hem de sorun izleyici aracılığıyla geliştirici geri bildirimlerini dikkate alırız.

SDK dışı arayüzlere erişimi nasıl etkinleştirebilirim?

API yaptırım politikasını değiştirmek için adb komutlarını kullanarak geliştirme cihazlarında SDK dışı arayüzlere erişimi etkinleştirebilirsiniz. Kullandığınız komutlar API düzeyine göre değişiklik gösterir. Bu komutlar rootlanmış bir cihaz gerektirmez.

Android 10 (API düzeyi 29) veya sonraki sürümler

Erişimi etkinleştirmek için aşağıdaki adb'yi kullanın

komut:

adb shell settings put global hidden_api_policy  1

API'yi zorunlu kılma politikasını varsayılan ayarlara sıfırlamak için aşağıdaki komutu kullanın:

adb shell settings delete global hidden_api_policy
Android 9 (API düzeyi 28)

Erişimi etkinleştirmek için aşağıdaki adb komutlarını kullanın:

adb shell settings put global hidden_api_policy_pre_p_apps  1
adb shell settings put global hidden_api_policy_p_apps 1

API'yi zorunlu kılma politikasını varsayılan ayarlara sıfırlamak için aşağıdaki komutları kullanın:

adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps

API yaptırım politikasındaki tam sayıyı aşağıdaki değerlerden birine ayarlayabilirsiniz:

  • 0: SDK olmayan arayüzlerin tüm algılamasını devre dışı bırakın. Bu ayarın kullanılması, SDK dışı arayüz kullanımıyla ilgili tüm günlük mesajlarını devre dışı bırakır ve uygulamanızı StrictMode API kullanarak test etmenizi engeller. Bu ayar önerilmez.
  • 1: Tüm SDK dışı arayüzlere erişimi etkinleştirin ancak SDK dışı arayüz kullanımlarıyla ilgili uyarılar içeren yazdırma günlük mesajlarını. Bu ayar, uygulamanızı StrictMode API aracılığıyla test etmenize de olanak tanır.
  • 2: Engellenenler listesine ait olan veya hedef API düzeyiniz için koşullu olarak engellenmiş SDK dışı arayüzlerin kullanımına izin vermeyin.

SDK olmayan arayüz listeleri hakkında sorular

Sistem görüntüsünde SDK olmayan API listelerini nerede bulabilirim?

Bunlar, platform dex dosyalarındaki alan ve yöntem erişim işareti bitlerinde kodlanır. Sistem görüntüsünde bu listeleri içeren ayrı bir dosya yoktur.

SDK dışı API listeleri, aynı Android sürümlerine sahip farklı OEM cihazlarda aynı mı?

OEM'ler kendi arayüzlerini engellenenler listesine (kara liste) ekleyebilir ancak AOSP SDK dışı API listelerinden arayüzleri kaldıramazlar. CDD bu tür değişiklikleri önler ve CTS testleri, Android Çalışma Zamanı'nın listeyi zorunlu kılmasını sağlar.

Yerel kodda NDK olmayan arayüzler için herhangi bir kısıtlama var mı?

Android SDK'sı Java arayüzleri içerir. Platform, Android 7'de (API düzeyi 26) yerel C/C++ kodu için NDK olmayan arayüzlere erişimi kısıtlamaya başladı. Daha fazla bilgi için Android N'de Özel C/C++ Sembolü Kısıtlamalarıyla Kararlılığı İyileştirme bölümüne bakın.

Dex2oat veya DEX dosyası işlemeyi kısıtlamaya yönelik bir plan var mı?

Dex2oat ikili programına erişimi kısıtlamak için etkin bir planımız yok ancak DEX dosya biçiminin, Dalvik Yürütülebilir biçiminde herkese açık şekilde belirtilen bölümlerin dışında kararlı veya genel bir arayüz olmasını düşünmüyoruz. Dex2oat'ı ve DEX biçiminin belirtilmemiş bölümlerini istediğimiz zaman değiştirme veya kaldırma hakkımızı saklı tutarız. Ayrıca, ODEX (OAT olarak da bilinir), VDEX ve CDEX gibi dex2oat tarafından üretilen türetilmiş dosyaların tamamının belirtilmemiş biçimler olduğunu da unutmayın.

Önemli bir üçüncü taraf SDK (örneğin, kod karartma aracı) SDK dışı arayüzleri kullanmaktan kaçınsa da gelecekteki Android sürümleriyle uyumluluğu korumayı taahhüt ederse ne olur? Bu durumda Android, uyumluluk gereksinimlerinden feragat edebilir mi?

Her SDK için uyumluluk şartlarından feragat etme planımız bulunmamaktadır. Bir SDK geliştiricisi yalnızca desteklenmeyen (eski adıyla gri) listelerindeki arayüzlere bağlı olarak uyumluluğu koruyabiliyorsa SDK arayüzlerine veya diğer alternatiflere geçiş planlamaya başlamalı ve SDK dışı bir arayüz kullanmaya alternatif bulamadığında yeni bir herkese açık API istemelidir.

SDK dışı arayüz kısıtlamaları yalnızca üçüncü taraf uygulamaları değil, sistem ve birinci taraf uygulamaları da dahil olmak üzere tüm uygulamalar için geçerli midir?

Evet, ancak platform anahtarıyla imzalanan uygulamaları ve bazı sistem görüntüsü uygulamalarını muaf tutarız. Bu muafiyetlerin yalnızca sistem görüntüsünün parçası olan uygulamalar (veya güncellenmiş sistem görüntüsü uygulamaları) için geçerli olduğunu unutmayın. Liste, SDK API'leri (LOCAL_PRIVATE_PLATFORM_APIS := true) yerine yalnızca özel platform API'lerine dayalı derleme yapan uygulamalar için tasarlanmıştır.