Android SDK sürümü özellikleri

Android uygulamaları, build.gradle dosyalarında çeşitli SDK sürümü özellikleri ayarlayabilir. Android build.gradle dokümanlarında bu özelliklerin genel olarak uygulama için ne anlama geldiği açıklanmaktadır. Bu belgede bu özelliklerin NDK derlemelerini nasıl etkilediği açıklanmaktadır.

DerlemeSdkVersion

Bu özelliğin NDK derlemeleri üzerinde herhangi bir etkisi yoktur. NDK için API kullanılabilirliği, bunun yerine minSdkVersion tarafından yönetilir. Bunun nedeni, C++ simgelerinin ilk çağrıldıklarında (Java'da oldukları gibi) geç çözüldüklerinde değil, kitaplık yükleme zamanında istekle çözümlenmesidir. minSdkVersion içinde bulunmayan sembollerin kullanılması, API'lerin çağrılıp çağrılmadığına bakılmaksızın kitaplığın daha yeni API'ye sahip olmayan OS sürümlerinde yüklenememesine neden olur.

Yeni bir uygulama için mevcut en yeni sürümü seçin. Mevcut bir uygulama için, uygun olduğunda bunu en son sürüme güncelleyin.

hedef SDKSürümü

Java'ya benzer şekilde, uygulamanızın targetSdkVersion öğesi de yerel kodun çalışma zamanı davranışını değiştirebilir. Sistemdeki davranış değişiklikleri, mümkün olduğunda yalnızca değişikliği uygulayan işletim sistemi sürümüyle aynı veya daha yüksek targetSdkVersion olan uygulamalara uygulanır.

Yeni bir uygulama için mevcut en yeni sürümü seçin. Mevcut bir uygulama için, uygun olduğunda bunu en son sürüme güncelleyin (compileSdkVersion güncellemesinden sonra).

Uygulama geliştiriciler genellikle uygulamalarının targetSdkVersion bilgisini bilse de bu API, kullanıcılarının hangi targetSdkVersion öğesini seçeceğini bilmeyen kitaplık geliştiricileri için yararlıdır.

Çalışma zamanında, android_get_application_target_sdk_version() yöntemini çağırarak bir uygulama tarafından kullanılan targetSdkVersion sağlayabilirsiniz. Bu API, API düzeyi 24 ve sonraki sürümlerde kullanılabilir. Bu işlev aşağıdaki imzaya sahiptir:

/**
 * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if
 * there is no known target SDK version (for code not running in the context of
 * an app).
 *
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
 *
 * See also android_get_device_api_level().
 *
 * Available since API level 24.
 */
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);

Diğer davranış değişiklikleri cihazın API düzeyine bağlı olabilir. android_get_device_api_level() yöntemini çağırarak uygulamanızın çalıştığı cihazın API düzeyini öğrenebilirsiniz. Bu işlev aşağıdaki imzaya sahiptir:

/**
 * Returns the API level of the device we're actually running on, or -1 on failure.
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the Java `Build.VERSION.SDK_INT` API.
 *
 * See also android_get_application_target_sdk_version().
 */
int android_get_device_api_level();

maksSdkSürümü

Bu özelliğin NDK derlemeleri üzerinde herhangi bir etkisi yoktur.

minSdkSürümü

build.gradle dosyanızda ayarlanan minSdkVersion, derleme sırasında hangi API'lerin kullanılabileceğini belirler (bunun Java derlemelerinden neden farklı olduğunu anlamak için derSdkVersion bölümüne bakın) ve kodunuzun uyumlu olacağı minimum işletim sistemi sürümünü belirler.

minSdkVersion, NDK tarafından kodunuzu derlerken hangi özelliklerin kullanılabileceğini belirlemek için kullanılır. Örneğin, bu özellik libc'de hangi FORTIFY özelliklerinin kullanıldığını belirler ve Android'in eski sürümleriyle uyumlu olmayan ikili dosyalarınız için performans ya da boyut iyileştirmelerini (ör. GNU karmaları veya RELR) etkinleştirebilir. Yeni API kullanmasanız bile bu özellik, kodunuzun desteklenen minimum OS sürümünü yönetir.

Yeni bir uygulama için Android Studio'nun Yeni Proje Sihirbazı'nda veya apilevels.com'da kullanıcı dağıtım verilerini görebilirsiniz. Potansiyel pazar payı ve bakım maliyetleri arasında bakiyenizi seçin. minSdkVersion değeriniz ne kadar düşük olursa eski hataları düzeltmeye ve henüz uygulanmamış özellikler için yedek davranışlar eklemeye daha fazla zaman ayırırsınız.

Mevcut bir uygulamada, eski API düzeyleri bakım maliyetlerine katlanmadığında minSdkVersion artırın ya da kullanıcılarınız talep ediyorsa ve yeni bakım maliyetlerine değerse bunu düşürün. Play Console'da, uygulamanızın kullanıcı dağılımına özel metrikler vardır.

Uygulamanızın minSdkVersion öğesi, __ANDROID_MIN_SDK_VERSION__ makrosu aracılığıyla ön işleyiciye sunulur (eski __ANDROID_API__ aynıdır ancak anlamı daha açık olduğu için ilkini tercih eder). Bu makro Clang tarafından otomatik olarak tanımlanır. Dolayısıyla, makroyu kullanmak için herhangi bir üstbilginin eklenmesine gerek yoktur. NDK derlemeleri için bu makro her zaman tanımlanır.