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.