SDK uzantıları, daha önce yayınlanan belirli API düzeyleri için herkese açık SDK'ya API'ler eklemek üzere modüler sistem bileşenlerinden yararlanır. Bu API'ler, son kullanıcılar Google Play sistem güncellemeleri aracılığıyla modül güncellemeleri aldığında cihazlara gönderilir. Uygulama geliştiriciler, bu API'leri uygulamalarında kullanarak Android'in önceki sürümlerine yönelik SDK'da başlangıçta bulunmayan ek işlevler sağlayabilir.
API Sürümü Oluşturma
Android 11'den (API düzeyi 30) itibaren Android cihazlarda bir dizi SDK uzantısı bulunur. Yeni API'ler eklendiğinde API düzeyine dahil edilir ancak belirli bir sürümün SDK uzantısına da dahil edilebilir. Örneğin, fotoğraf seçici için ACTION_PICK_IMAGES API'si Android 13'te (API düzeyi 33) herkese açık SDK'ya eklenmiş ancak R Uzantıları Sürüm 2'den itibaren SDK uzantıları aracılığıyla da kullanılabilir. SDK uzantı adları, bir tam sayı sabitine karşılık gelir. Bu sabit, Build.VERSION_CODES içindeki bir sabit veya SdkExtensions sınıfında tanımlanan bir sabit (ör. SdkExtensions.AD_SERVICES) olabilir.
Hangi SDK uzantılarının kullanılacağını belirleme
SDK Uzantısı API'lerini kullanabilmek için öncelikle uygulamanızın kullanım alanlarını destekleyen API'leri hangi SDK'ların içerdiğini belirlemeniz gerekir.
SDK uzantısı API'lerinin API referans sayfalarında, uygulamanızın bir API'ye erişmek için kullanabileceği en eski SDK uzantısı sürümü belirtilir. Dokümanlarda bir Android platform sürümü (API düzeyiyle referans verilir) de belirtiliyorsa bu API, Android'in söz konusu sürümünü veya sonraki sürümlerini çalıştıran tüm cihazlarda da kullanılabilir.
Örneğin, ACTION_PICK_IMAGES, Android 13 (API düzeyi 33) sürümünden itibaren genel olarak herkese açık SDK'da kullanılabilir. Ayrıca, cihazda en az R Uzantıları Sürüm 2 olduğu sürece Android 11 (API düzeyi 30) sürümüne kadar olan cihazlarda da kullanılabilir:
Bu API'yi kullanmak için en az API düzeyi 33 veya en az uzantı düzeyi 2 olan bir SDK'ya göre derleme yapmanız gerekir.
Uzantı SDK'sını kullanmak için aşağıdaki adımları uygulayın:
- Kullanmak istediğiniz API'lerin özellik dokümanlarını ve API referansını kontrol ederek ihtiyacınız olan minimum uzantı sürümünü bulun.
- Özellik setiniz için gerekli uzantı sürümünü belirledikten sonra Android Studio'da SDK Manager'ı açın.
- İlgili uzantı sürümüne (veya API'ler ekleyici olduğundan daha yüksek bir sürüme) sahip Android SDK Platform girişini seçin. Örneğin: Android SDK Platform 33, Uzantı Düzeyi 4.
Bu değerleri uygulamanızın
build.gradle.ktsveyabuild.gradledosyasında beyan edin:Modern
android { compileSdk 33 compileSdkExtension 4 ... }
Kotlin
android { compileSdk = 33 compileSdkExtension = 4 ... }
SDK uzantılarının kullanılıp kullanılamadığını kontrol etme
Uygulamanız, çalışma zamanında hangi SDK uzantısı sürümlerinin kullanılabildiğini kontrol edebilir. Geliştirme sırasında ise aşağıdaki bölümlerde açıklandığı gibi Android Debug Bridge (adb) komutlarını kullanarak uzantı sürümlerini arayabilirsiniz.
Çalışma zamanında kontrol etme
Uygulamanız, getExtensionVersion() yöntemini kullanarak belirli bir platform sürümünde SDK uzantılarının kullanılabilir olup olmadığını çalışma zamanında kontrol edebilir. Örneğin, aşağıdaki kod, Android 11 (API düzeyi 30) SDK uzantısı için uzantı sürümü 2 veya daha yenisinin kullanılabilir olup olmadığını kontrol eder:
Kotlin
fun isPhotoPickerAvailable(): Boolean { return SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2 // Safely use extension APIs that are available with Android 11 (API level 30) Extensions Version 2, such as Photo Picker. }
Java
public static final boolean isPhotoPickerAvailable() { return SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2; }
Bu, Build.VERSION.SDK_INT temelinde kontrol yapmaya benzer:
Kotlin
fun isPhotoPickerAvailable(): Boolean { return Build.VERSION.SDK_INT >= 33 }
Java
public static final boolean isPhotoPickerAvailable() { return Build.VERSION.SDK_INT >= 33; }
Bu SDK_INT kontrolü hâlâ güvenli ve geçerlidir ancak uzantı API'si kullanılabilir olsa bile isPhotoPickerAvailable bazı cihazlarda yanlış değerini döndürür. Bu nedenle, SDK_INT kontrolü ideal değildir ve API kullanılabilirliğini kontrol etmek için uzantı sürümü kontrolü daha iyi bir yöntemdir. SDK_INT 33'den büyük veya eşit (Android 13 ya da sonraki sürümler) tüm cihazlarda fotoğraf seçici API'leri herkese açık SDK'da bulunur. Ancak SDK_INT 33'ten küçük (ör. Android 11, 12 ve 12L) olan ve en az 2 R uzantılı sürümü varsa API'lere erişebilen cihazlar da vardır.
Bu durumda, uzantı sürümü kontrolü kullanmak uygulamanızın daha fazla kullanıcıya ek işlevler sunmasına yardımcı olabilir. Bir cihazda belirli SDK uzantılarını kontrol etmek için kullanabileceğiniz tüm sabitlerin listesini görmek istiyorsanız SDK uzantı adları ve sabitleri başlıklı makaleyi inceleyin.
Reklam Hizmetleri Uzantıları
Genel SDK uzantıları grubuna benzer şekilde, AdServices API referansı
bazen bir API'nin "Ad Services Extensions" sürümünün parçası olduğunu gösterir.
Genel SDK uzantılarından farklı olarak, Ad Services Extensions, bir cihazda hangi sürümün olduğunu belirlemek için SdkExtensions.AD_SERVICES sabitini kullanır:
Kotlin
fun isAdServicesAvailable(): Boolean { return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4 }
Java
public static final boolean isAdServicesAvailable() { return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4; }
Reklam Hizmetleri Uzantıları'ndaki özellikler ve nasıl başlayacağınız hakkında daha fazla bilgi edinmek için Reklam Hizmetleri Uzantıları dokümanlarını inceleyin.
Yardımcı yöntemler
Bazı durumlarda, SDK uzantılarında SDK uzantısı API'lerinin kullanılabilirliğini kontrol etmek için Jetpack yardımcı yöntemleri bulunur. Örneğin, koşullu sürüm kontrollerini soyutlayan PhotoPicker kullanılabilirliğini kontrol etmek için Jetpack kitaplığı işlevini kullanabilirsiniz.
Araç desteği
Android Studio Flamingo | 2022.2.1 veya sonraki sürümlerde lint aracı, NewAPI kontrolünün bir parçası olarak SDK uzantısı sürümleriyle ilgili sorunları tarayabilir. Ayrıca Android Studio, SDK uzantıları kullanılarak başlatılan API'ler için doğru sürüm kontrollerini otomatik olarak oluşturabilir.
SDK uzantı adları ve sabitleri
Aşağıdaki tabloda, API referans belgelerinde listelenen farklı SDK uzantıları kümelerinin, uygulamanızın çalışma zamanında API kullanılabilirliğini kontrol etmek için kullanabileceği sabitlerle nasıl eşlendiği açıklanmaktadır. Her herkese açık SDK için genel SDK uzantıları grubu, Build.VERSION_CODES değerleriyle eşlenir.
| SDK uzantısının adı | Sabit | Uygun cihazlar |
|---|---|---|
| R Uzantıları | VERSION_CODES.R |
Android 11 (API düzeyi 30) ve sonraki sürümler |
| S Uzantıları | VERSION_CODES.S |
Android 12 (API düzeyi 31) ve sonraki sürümler |
| T Uzantıları | VERSION_CODES.TIRAMISU |
Android 13 (API düzeyi 33) ve sonraki sürümler |
| U Uzantıları | VERSION_CODES.UPSIDE_DOWN_CAKE |
Android 14 (API düzeyi 34) ve sonraki sürümler |
| V Uzantıları | VERSION_CODES.VANILLA_ICE_CREAM |
Android 15 (API düzeyi 35) ve sonraki sürümler |
| B Uzantıları | VERSION_CODES.BAKLAVA |
Android 16 (API düzeyi 36) ve sonraki sürümler |
| C Uzantıları | VERSION_CODES.CINNAMON_BUN |
Android 17 (API düzeyi 37) ve sonraki sürümler |
| Reklam Hizmetleri Uzantıları | SdkExtensions.AD_SERVICES |
Android 13 (API düzeyi 33) ve sonraki sürümler |
adb kullanarak kontrol etme
adb kullanarak bir cihazda hangi SDK uzantılarının kullanılabildiğini kontrol etmek için aşağıdaki komutu çalıştırın:
adb shell getprop | grep build.version.extensions
Komutu çalıştırdıktan sonra aşağıdakine benzer bir çıkış görürsünüz:
[build.version.extensions.r]: [3] # Android 11 (API level 30) and higher
[build.version.extensions.s]: [3] # Android 12 (API level 31) and higher
[build.version.extensions.t]: [3] # Android 13 (API level 33) and higher
Her satırda, cihazda bulunan bir SDK uzantısı ve ilgili uzantı sürümü (bu örnekte 3) gösterilir.