SDK olmayan arayüzlerle ilgili kısıtlamalar

Android 9'dan (API düzeyi 28) itibaren platform, uygulamanızın kullanabileceği SDK dışı arayüzleri kısıtlar. Bu kısıtlamalar, bir uygulama SDK olmayan bir arayüze her başvurduğunda veya yansıtma ya da JNI kullanarak bu arayüzün işleyicisini almaya çalıştığında geçerlidir. Bu kısıtlamalar, kullanıcı ve geliştirici deneyimini iyileştirmek, kullanıcılar için kilitlenme riskini ve geliştiriciler için acil dağıtım riskini azaltmak amacıyla uygulanmıştır. Bu kararla ilgili daha fazla bilgi için SDK Olmayan Arayüzlerin Kullanımını Azaltarak Kararlılığı Artırma başlıklı makaleyi inceleyin.

SDK ve SDK olmayan arayüzleri ayırt etme

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

Uygulamaların kilitlenmesini ve beklenmedik davranışlar sergilemesini önlemek için SDK'daki sınıfların yalnızca resmi olarak belgelenmiş kısımları kullanılmalıdır. Bu, yansıtma gibi mekanizmalar kullanarak bir sınıfla etkileşim kurduğunuzda SDK'da listelenmeyen yöntemlere veya alanlara erişmemeniz gerektiği anlamına da gelir.

SDK dışı API listeleri

Android'in her sürümünde, SDK olmayan ek arayüzler kısıtlanır. Bu kısıtlamaların yayın iş akışınızı etkileyebileceğini biliyoruz. Bu nedenle, SDK dışı arayüzlerin kullanımını tespit etmenizi sağlayacak araçlara sahip olmanızı, bize geri bildirimde bulunmanızı ve yeni politikalara uyum sağlamak için plan yapmanızı istiyoruz.

SDK dışı kısıtlamaların geliştirme iş akışınız üzerindeki etkisini en aza indirmek için SDK dışı arayüzler, hangi API düzeyinin hedeflendiğine bağlı olarak kullanımlarının ne kadar kısıtlandığını tanımlayan listelere ayrılır. Aşağıdaki tabloda bu listelerin her biri açıklanmaktadır:

Liste Kod etiketleri Açıklama
Engellenenler listesi
  • blocked
  • Kullanımdan kaldırıldı: blacklist
Uygulamanızın hedef API düzeyinden bağımsız olarak kullanamayacağınız SDK dışı arayüzler. Uygulamanız bu arayüzlerden birine erişmeye çalışırsa sistem hata verir.
Koşullu 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 bu API düzeyini hedeflediğinde kısıtlanan SDK dışı arayüzler bulunur.

Bu listeler, bir uygulamanın söz konusu listedeki SDK olmayan arayüzlere erişemez hale gelmeden önce hedefleyebileceği maksimum API düzeyine (max-target-x) göre etiketlenir. Örneğin, Android Pie'da engellenmeyen ancak Android 10'da engellenen bir SDK dışı arayüz, max-target-p (greylist-max-p) listesinde yer alır. Burada "p", Pie veya Android 9'u (API düzeyi 28) ifade eder.

Uygulamanız, hedef API düzeyiniz için kısıtlanmış bir arayüze erişmeye çalışırsa sistem, API engellenenler listesinde yer alıyormuş gibi davranır.

Desteklenmiyor
  • unsupported
  • Kullanımdan kaldırıldı: greylist
Kısıtlanmamış ve uygulamanızın kullanabileceği SDK dışı arayüzler. Ancak bu arayüzlerin desteklenmediğini ve önceden haber verilmeksizin değiştirilebileceğini unutmayın. Bu arayüzlerin gelecekteki Android sürümlerinde koşullu olarak engellenmesini bekleyebilirsiniz. Engellenen arayüzler max-target-x listesinde yer alır.
SDK
  • Hem public-api hem de sdk
  • Kullanımdan kaldırıldı: Hem public-api hem de whitelist
Serbestçe kullanılabilen ve artık Package Index'in bir parçası olarak resmi olarak belgelenmiş Android çerçevesinde desteklenen arayüzler.
Test API'leri
  • test-api
Uyumluluk Test Paketi (CTS) aracılığıyla test yapmayı 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 (API düzeyi 30)'dan itibaren test API'leri engellenenler listesine dahil edildi. Bu nedenle, hedef API düzeylerinden bağımsız olarak uygulamaların bunları kullanmasına izin verilmiyor. Tüm test API'leri desteklenmez ve platform API düzeyinden bağımsız olarak önceden haber verilmeksizin değiştirilebilir.

Bazı SDK dışı arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilirsiniz ancak herhangi bir SDK dışı yöntem veya alan kullanmak uygulamanızın bozulması açısından her zaman yüksek risk taşır. Uygulamanız SDK dışı arayüzlere bağlıysa SDK arayüzlerine veya diğer alternatiflere geçiş planlamaya başlamanız gerekir. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmaya alternatif bulamıyorsanız yeni bir herkese açık API isteğinde bulunmalısınız.

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

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

Android 16

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074

Android 16'daki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 16'da SDK dışı arayüz kısıtlamalarındaki güncellemeler başlıklı makaleyi inceleyin.

Android 15

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9

Android 15'teki SDK olmayan API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 15'te SDK olmayan arayüz kısıtlamalarında yapılan güncellemeler başlıklı makaleyi inceleyin.

Android 14

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f

Android 14'teki SDK olmayan API listesi değişiklikleri hakkında daha fazla bilgi edinmek için Android 14'te SDK olmayan arayüz kısıtlamalarında yapılan güncellemeler başlıklı makaleyi inceleyin.

Android 13

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

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

Android 12

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: 40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761

Android 12'deki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için (Android 12'de koşullu olarak engellenen API'ler için önerilen genel API alternatifleri dahil) Android 12'deki liste değişiklikleri başlıklı makaleyi inceleyin.

Android 11

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

Android 11'deki SDK dışı API listesi değişiklikleri hakkında daha fazla bilgi edinmek için (Android 11'de koşullu olarak engellenen API'ler için önerilen herkese açık API alternatifleri dahil) Android 11'deki liste değişiklikleri başlıklı makaleyi inceleyin.

Android 10

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

Dosya: hiddenapi-flags.csv

SHA-256 sağlaması: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

Android 10'daki SDK olmayan API listesi değişiklikleri hakkında daha fazla bilgi edinmek için (Android 10'da koşullu olarak engellenen API'ler için önerilen herkese açık API alternatifleri dahil) Android 10'daki liste değişiklikleri başlıklı makaleyi inceleyin.

Android 9

Android 9 (API düzeyi 28) için aşağıdaki metin dosyasında, kısıtlanmamış (gri listeye alınmış) 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 zamanında oluşturulur.

AOSP'den liste oluşturma

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

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

Daha sonra dosyayı aşağıdaki konumda bulabilirsiniz:

out/soong/hiddenapi/hiddenapi-flags.csv

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

Aşağıdaki tabloda, uygulamanızın engellenenler listesinde yer alan bir SDK dışı arayüze erişmeye çalışması durumunda karşılaşabileceğiniz davranış açıklanmaktadır.

Erişim araçları Sonuç
Bir alana referans veren Dalvik talimatı NoSuchFieldError atıldı
Bir yönteme referans veren Dalvik talimatı NoSuchMethodError atıldı
Class.getDeclaredField() veya Class.getField() kullanarak yansıtma NoSuchFieldException atıldı
Class.getDeclaredMethod(), Class.getMethod() ile düşünme NoSuchMethodException atıldı
Class.getDeclaredFields(), Class.getFields() ile düşünme SDK üyesi olmayanlar sonuçlarda yer almıyor
Class.getDeclaredMethods(), Class.getMethods() ile düşünme SDK üyesi olmayanlar sonuçlarda yer almıyor
env->GetFieldID() kullanarak JNI NULL geri verildi, NoSuchFieldError atıldı
env->GetMethodID() kullanarak JNI NULL geri verildi, NoSuchMethodError atıldı

Uygulamanızı SDK dışı arayüzler açısından test etme

Uygulamanızda SDK dışı arayüzleri test etmek için kullanabileceğiniz çeşitli yöntemler vardır.

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

Android 9 (API düzeyi 28) veya sonraki bir sürümün yüklü olduğu bir cihazda ya da emülatörde hata ayıklanabilir bir uygulama oluşturup çalıştırarak SDK dışı 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.

Sistem, uygulamanızda testler yaparken uygulamanız belirli SDK dışı arayüzlere erişirse 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:

  • Bildirilen sınıf, ad ve tür (Android çalışma zamanı tarafından kullanılan biçimde).
  • Erişim yöntemi: bağlama, yansıtma veya JNI kullanma.
  • SDK olmayan 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 simgesini kullanabilirsiniz. Örneğin, günlükteki bir giriş şu şekilde olabilir:

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

StrictMode API'yi kullanarak test etme

StrictMode API'sini kullanarak SDK dışı arayüzleri de test edebilirsiniz. Bu özelliği etkinleştirmek için detectNonSdkApiUsage yöntemini kullanın. StrictMode API'sini etkinleştirdikten sonra, özel işleme uygulayabileceğiniz bir penaltyListener kullanarak SDK olmayan bir 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 izi, kullanım bağlamını sağlar.

Veridex aracını kullanarak test etme

Ayrıca, APK'nızda veridex 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 dışı arayüz kullanımlarını bildirir.

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

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

Windows

Yerel Windows ikili dosyaları sağlanmaz ancak Linux için Windows Alt Sistemi'ni (WSL) kullanarak Linux ikili dosyaları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 aşağıdaki adımları uygulayın:

  1. Android çalışma zamanı önceden oluşturulmuş depolarından veridex aracını indirin.
  2. appcompat.tar.gz dosyasının içeriğini ayıklayın.
  3. Ayıklanan klasörde veridex-linux.zip dosyasını bulup ayıklayın.
  4. Çıkartılmış klasöre gidin ve ardından aşağıdaki komutu çalıştırın. Burada 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ş depolarından veridex aracını indirin.
  2. appcompat.tar.gz dosyasının içeriğini ayıklayın.
  3. Ayıklanan klasörde veridex-mac.zip dosyasını bulup ayıklayın.
  4. Çıkartılmış klasöre gidin ve ardından aşağıdaki komutu çalıştırın. Burada /path-from-root/your-app.apk, sisteminizin kök dizininden başlayarak test etmek istediğiniz APK'nın yoludur:

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

Linux

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

  1. Android çalışma zamanı önceden oluşturulmuş depolarından veridex aracını indirin.
  2. appcompat.tar.gz dosyasının içeriğini ayıklayın.
  3. Ayıklanan klasörde veridex-linux.zip dosyasını bulup ayıklayın.
  4. Çıkartılmış klasöre gidin ve ardından aşağıdaki komutu çalıştırın. Burada 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 oluşturduğunuzda lint aracı, kodunuzu olası sorunlar açısından inceler. Uygulamanız SDK dışı arayüzler kullanıyorsa bu arayüzlerin ait olduğu listeye 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'daki bir test kanalına yüklediğinizde, uygulamanız olası sorunlar için otomatik olarak test edilir ve lansman öncesi rapor oluşturulur. Uygulamanız SDK dışı arayüzler kullanıyorsa bu arayüzlerin ait olduğu listeye bağlı olarak lansman öncesi raporda bir hata veya uyarı gösterilir.

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

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

Uygulamanızdaki bir özellik için SDK olmayan bir arayüz kullanmaya alternatif bulamıyorsanız sorun izleyicimizde ö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.
  • Bu API'leri neden kullanmanız gerektiği (API'nin gerekli olduğu üst düzey özellik hakkında ayrıntılar dahil, yalnızca düşük düzey ayrıntılar değil)
  • İlgili genel SDK API'lerinin neden amaçlarınız için yetersiz olduğu
  • Denediğiniz diğer alternatifler ve bunların neden işe yaramadığı.

Özellik isteğinizde bu ayrıntıları sağladığınızda yeni bir herkese açık API'nin verilme olasılığını artırırsınız.

Diğer sorular

Bu bölümde, geliştiricilerin sıkça sorduğu diğer soruların bazı yanıtları yer almaktadır:

Genel sorular

Google, Issue Tracker üzerinden tüm uygulamaların ihtiyaçlarını karşılayabildiğinden nasıl emin olabilir?

Android 9 (API düzeyi 28) için ilk listeleri, uygulamaların statik analiziyle oluşturduk. Bu analiz, aşağıdaki yöntemlerle desteklendi:

  • En popüler Play ve Play dışı uygulamaların manuel testi
  • dahili raporlar
  • Dahili kullanıcılardan otomatik veri toplama
  • geliştirici önizleme raporları
  • daha fazla yanlış pozitif içerecek şekilde tasarlanmış ek statik analiz

Her yeni sürüm için listeleri değerlendirirken API kullanımının yanı sıra sorun izleyici aracılığıyla alınan geliştirici geri bildirimlerini de dikkate alırız.

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

API zorunluluğu 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şir. Bu komutlar için root erişimli cihaz gerekmez.

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

Erişimi etkinleştirmek için aşağıdaki adb komutunu kullanın.

komut:

adb shell settings put global hidden_api_policy  1

API zorunluluğu 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 zorunluluğu 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 zorunlu kılma politikasındaki tam sayıyı aşağıdaki değerlerden birine ayarlayabilirsiniz:

  • 0: SDK olmayan arayüzlerin tüm algılanmasını devre dışı bırakır. Bu ayarın kullanılması, SDK olmayan arayüz kullanımına yönelik tüm günlük mesajlarını devre dışı bırakır ve uygulamanızı StrictMode API'siyle test etmenizi engeller. Bu ayar önerilmez.
  • 1: Tüm SDK dışı arayüzlere erişimi etkinleştirin ancak SDK dışı arayüz kullanımıyla ilgili uyarı içeren günlük mesajları yazdırın. Bu ayarı kullanarak uygulamanızı StrictMode API'siyle de test edebilirsiniz.
  • 2: Engellenenler listesinde yer alan veya hedef API düzeyiniz için koşullu olarak engellenen SDK dışı arayüzlerin kullanımına izin vermeyin.

SDK olmayan arayüz listeleriyle ilgili sorular

Sistem görüntüsündeki SDK dışı API listelerini nerede bulabilirim?

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

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

OEM'ler engellenenler listesine (kara liste) kendi arayüzlerini ekleyebilir ancak AOSP non-SDK API listelerinden arayüzleri kaldıramaz. CDD bu tür değişiklikleri engeller ve CTS testleri, Android Çalışma Zamanı'nın listeyi zorunlu kıldığından emin olmanızı sağlar.

Yerel kodda NDK olmayan arayüzlerle ilgili herhangi bir kısıtlama var mı?

Android SDK'sı Java arayüzlerini içerir. Platform, Android 7'de (API seviyesi 26) yerel C/C++ kodu için NDK dışı 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ığı Artırma başlıklı makaleyi inceleyin.

dex2oat veya DEX dosyası kullanımını kısıtlama planı var mı?

dex2oat ikilisine erişimi kısıtlamak için aktif planlarımız olmasa da DEX dosya biçiminin, Dalvik Executable format'ta herkese açık olarak belirtilen kısımların ötesinde kararlı veya herkese açık bir arayüz olmasını amaçlamıyoruz. dex2oat'ı ve DEX biçiminin belirtilmeyen kısımlarını herhangi bir zamanda değiştirme veya kaldırma hakkımızı saklı tutarız. Ayrıca, dex2oat tarafından oluşturulan ODEX (OAT olarak da bilinir), VDEX ve CDEX gibi türetilmiş dosyaların tümünün belirtilmemiş biçimler olduğunu da unutmayın.

Önemli bir üçüncü taraf SDK'sı (ör. karartıcı) SDK dışı arayüzlerin kullanımını engelleyemiyorsa ancak gelecekteki Android sürümleriyle uyumluluğu korumayı taahhüt ediyorsa ne olur? Android bu durumda uyumluluk şartlarından feragat edebilir mi?

SDK bazında uyumluluk şartlarından feragat etme planımız yoktur. Bir SDK geliştiricisi, yalnızca desteklenmeyen (eski adıyla gri) listelerdeki arayüzlere bağlı kalarak uyumluluğu koruyabiliyorsa SDK arayüzlerine veya diğer alternatiflere geçiş planlamaya başlamalı ve SDK olmayan bir arayüz kullanmaya alternatif bulamadığında yeni bir genel API isteğinde bulunmalıdır.

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

Evet. Ancak platform anahtarıyla imzalanmış uygulamalar ve bazı sistem görüntüsü uygulamaları bu kuraldan muaftır. Bu muafiyetlerin yalnızca sistem görüntüsünün parçası olan (veya güncellenmiş sistem görüntüsü uygulamaları) uygulamalar için geçerli olduğunu unutmayın. Bu liste yalnızca SDK API'leri (LOCAL_PRIVATE_PLATFORM_APIS := true) yerine özel platform API'lerine karşı oluşturulan uygulamalar için hazırlanmıştır.