Cihaz uyumluluğuna genel bakış

Android; telefon, tablet ve televizyon gibi birçok farklı cihazda çalışacak şekilde tasarlanmıştır. Cihaz yelpazesi, uygulamanız için muazzam bir potansiyel kitle sağlar. Uygulamanızın tüm cihazlarda başarılı olması için özellik değişkenliğine uyum sağlaması ve farklı ekran yapılandırmalarına uyum sağlayan esnek bir kullanıcı arayüzü sunması gerekir.

Android, cihaz uyumluluğuna yardımcı olmak için farklı ekran boyutları için farklı XML düzenleri gibi statik dosyalarda yapılandırmaya özel uygulama kaynakları sağlayabileceğiniz bir dinamik uygulama çerçevesi sağlar. Daha sonra Android, geçerli cihaz yapılandırmasına göre uygun kaynakları yükler. Uygulama tasarımınızı ve ek uygulama kaynaklarınızı göz önünde bulundurarak, çeşitli cihazlardaki kullanıcı deneyimini optimize eden tek bir uygulama paketi (APK) yayınlayabilirsiniz.

Ancak gerekirse uygulamanızın özellik gereksinimlerini belirtebilir ve uygulamanızı Google Play Store'dan hangi tür cihazların yükleyebileceğini kontrol edebilirsiniz. Bu dokümanda, uygulamalarınıza erişimi olan cihazları nasıl kontrol edebileceğiniz ve uygulamalarınızı doğru kitleye ulaşacak şekilde nasıl hazırlayacağınız açıklanmaktadır.

"Uyumluluk" ne anlama gelir?

Android geliştirmeyle ilgili olarak iki tür uyumluluk vardır: cihaz uyumluluğu ve uygulama uyumluluğu.

Android açık kaynak bir proje olduğundan tüm donanım üreticileri Android işletim sistemini çalıştıran bir cihaz geliştirebilir. Ancak bir cihazın "Android uyumlu" olması için Android yürütme ortamı için yazılmış uygulamaları doğru şekilde çalıştırması gerekir. Android yürütme ortamının tam ayrıntıları Android uyumluluk programı tarafından tanımlanmıştır. Her cihazın uyumlu olarak kabul edilmesi için Uyumluluk Test Paketi'nden (CTS) geçmesi gerekir.

Uygulama geliştirici olarak, bir cihazın Android uyumlu olup olmadığı konusunda endişelenmenize gerek yoktur, çünkü yalnızca Android uyumlu cihazlar Google Play Store'u içerir. Yani bir kullanıcı, uygulamanızı Google Play Store'dan yüklüyorsa, Android uyumlu bir cihaz kullanıyor demektir.

Ancak, uygulamanızın her potansiyel cihaz yapılandırmasıyla uyumlu olup olmadığını göz önünde bulundurmanız gerekir. Android pek çok farklı cihaz yapılandırması üzerinde çalıştığından bazı özellikler tüm cihazlarda kullanılamaz. Örneğin, bazı cihazlarda pusula sensörü bulunmayabilir. Uygulamanızın temel işlevi için pusula sensörü gerekiyorsa, uygulamanız yalnızca bu özelliğe sahip cihazlarla uyumludur.

Uygulamanızın cihazlarda kullanılabilirliğini kontrol etme

Android, uygulamanızın platform API'leri aracılığıyla yararlanabileceği çeşitli özellikleri destekler. Pusula sensörü gibi bazı özellikler donanım tabanlıdır; bazıları uygulama widget'ları gibi yazılım tabanlıdır; bazıları ise platform sürümüne bağlıdır. Her cihaz her özelliği desteklemez. Bu nedenle, gerekli özelliklere göre uygulamanızın cihazlarda kullanılabilirliğini kontrol etmeniz gerekebilir.

Uygulamanız için mümkün olan en geniş kullanıcı tabanına ulaşmak üzere tek bir APK veya AAB kullanarak mümkün olduğunca çok sayıda cihaz yapılandırmasını destekleyin. Çoğu durumda, çalışma zamanında isteğe bağlı özellikleri devre dışı bırakarak ve farklı yapılandırmalar için alternatifler (ör. farklı ekran boyutları için farklı düzenler) uygulama kaynakları sağlayarak bunu yapabilirsiniz. Gerekirse uygulamanızın kullanılabilirliğini Google Play Store üzerinden aşağıdaki cihaz özelliklerine göre belirli cihazlarla kısıtlayabilirsiniz:

Cihaz özellikleri

Android, cihaz özelliklerine göre uygulamanızın kullanılabilirliğini yönetmek amacıyla tüm cihazlarda bulunmayabilecek donanım veya yazılım özelliklerinin özellik kimliklerini tanımlar. Örneğin, pusula sensörünün özellik kimliği FEATURE_SENSOR_COMPASS, uygulama widget'larının özellik kimliği ise FEATURE_APP_WIDGETS şeklindedir.

Gerekirse cihazları gerekli bir özelliği sağlamadığında kullanıcıların uygulamanızı yüklemesini engelleyebilirsiniz. Bunun için uygulamanızın manifest dosyasında bir <uses-feature> öğesi kullanarak özelliği belirtebilirsiniz.

Örneğin, uygulamanız, pusula sensörü olmayan bir cihazda anlamlı değilse aşağıdaki manifest etiketini kullanarak pusula sensörünü bir gereklilik olarak belirtebilirsiniz:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Google Play Store, uygulamanızın her cihazla uyumlu olup olmadığını belirlemek için uygulamanızın gerektirdiği özellikleri her kullanıcının cihazında bulunan özelliklerle karşılaştırır. Cihaz, uygulamanızın gerektirdiği tüm özelliklere sahip değilse kullanıcı uygulamanızı yükleyemez.

Bununla birlikte, uygulamanızın birincil işlevi cihaz özelliği gerektirmiyorsa required özelliğini "false" olarak ayarlayın ve çalışma zamanında cihaz özelliğini kontrol edin. Uygulama özelliği mevcut cihazda kullanılamıyorsa karşılık gelen uygulama özelliğini düzgünce düşürebilirsiniz. Örneğin, şu şekilde hasSystemFeature() yöntemini çağırarak bir özelliğin kullanılabilir olup olmadığını sorgulayabilirsiniz:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

Uygulamanızın Google Play Store'daki kullanılabilirliğini kontrol etmek üzere kullanabileceğiniz tüm filtreler hakkında bilgi için Google Play'deki filtreler dokümanlarına bakın.

Platform sürümü

Farklı cihazlar, Android platformunun farklı sürümlerini (ör. Android 12 veya Android 13) çalıştırabilir. Birbirini takip eden her platform sürümü genellikle önceki sürümde bulunmayan API'leri ekler. Hangi API kümesinin kullanılabildiğini belirtmek için her platform sürümü bir API düzeyi belirtir. Örneğin, Android 12 API düzeyi 31, Android 13 ise API düzeyi 33'tür.

build.gradle dosyanızda minSdkVersion ve targetSdkVersion değerlerini belirtmeniz gerekir:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Modern

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

build.gradle dosyası hakkında daha fazla bilgi için Derlemenizi yapılandırma bölümünü okuyun.

Android'in takip eden her sürümü, önceki platform sürümlerindeki API'ler kullanılarak oluşturulan uygulamalar için uyumluluk sağlar. Bu nedenle, uygulamanız, belgelenen Android API'lerini kullanırken gelecekteki Android sürümleriyle uyumludur.

Bununla birlikte, uygulamanız daha yeni bir platform sürümünde eklenen API'leri kullanıyorsa ancak birincil işlevi için bu API'leri gerektirmiyorsa çalışma zamanında API seviyesini kontrol edin ve API düzeyi çok düşük olduğunda ilgili özellikleri sorunsuz şekilde düşürün. Bu durumda, minSdkVersion özelliğini uygulamanızın birincil işlevi için mümkün olan en düşük değere ayarlayın ve ardından aşağıdaki örnekte gösterildiği gibi, mevcut sistem sürümünü (SDK_INT) kontrol etmek istediğiniz API düzeyine karşılık gelen Build.VERSION_CODES kodundaki kod adı sabitiyle karşılaştırın:

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

Ekran yapılandırması

Android; telefon, tablet ve TV gibi çeşitli boyutlardaki cihazlarda çalışır. Android, cihazları ekran türlerine göre sınıflandırmak amacıyla her cihaz için iki özellik tanımlar: ekran boyutu (ekranın fiziksel boyutu) ve ekran yoğunluğu (ekrandaki piksellerin fiziksel yoğunluğu, DPI olarak bilinir). Android farklı yapılandırmaları basitleştirmek için bu varyantları hedeflemeyi daha kolay hale getiren gruplar halinde geneller:

  • Dört genelleştirilmiş boyut: küçük, normal, büyük ve xlarge
  • Çeşitli genel yoğunluklar: mdpi (orta), hdpi (yüksek), xhdpi (ekstra yüksek), xxhdpi (ekstra yüksek) ve diğerleri

Sistem, her ekran için kullanıcı arayüzü düzeninizde ve görüntü kaynaklarınızda gerekli ayarlamaları yaptığından, varsayılan olarak uygulamanız tüm ekran boyutları ve yoğunluklarıyla uyumludur. Ortak ekran yoğunlukları için optimize edilmiş bit eşlem resimler sağlayın.

Mümkün olduğunca esnek düzenler kullanarak kullanıcı deneyimini optimize edin. Dikey ve yatay veya büyük ya da küçük pencere boyutları gibi büyük yapılandırma değişiklikleri için düzenler olduğunda, yapılandırmada daha küçük değişikliklere esnek olan alternatif düzenler sağlamayı düşünün. Bu sayede tabletler, telefonlar ve katlanabilir cihazlar gibi form faktörlerinde kullanıcı deneyimini iyileştirir. Çoklu pencere modunda pencerelerin boyutu değiştiğinde de faydalıdır.

Farklı ekranlar için alternatif kaynaklar oluşturma ve gerektiğinde uygulamanızı belirli ekran boyutlarıyla kısıtlama hakkında bilgi edinmek için ekran uyumluluğuna genel bakış bölümünü okuyun ve büyük ekran uygulama kalitesi yönergelerine bakın.

Uygulamanızın kullanılabilirliğini ticari nedenlerle kontrol etme

Uygulamanızın kullanılabilirliğini cihaz özelliklerine göre kısıtlamanın yanı sıra, işle ilgili veya yasal nedenlerle uygulamanızın kullanılabilirliğini kısıtlamanız gerekebilir. Bu tür durumlarda Google Play Store, Play Console'da kullanıcı yerel ayarı veya kablosuz operatör gibi teknik olmayan nedenlerle uygulamanızın kullanılabilirliğini kontrol etmenize olanak tanıyan filtreleme seçenekleri sunar.

Gerekli donanım bileşenleri gibi teknik uyumluluk için filtreleme her zaman APK veya AAB dosyanızda bulunan bilgilere dayanır. Ancak coğrafi yerel ayar gibi teknik olmayan nedenlerle filtreleme her zaman Google Play Console'da gerçekleştirilir.

Ek kaynaklar:

Uygulama kaynaklarına genel bakış
Uygulama kaynaklarını uygulama kodundan ayırmak için Android uygulamalarının nasıl yapılandırıldığına dair bilgiler (belirli cihaz yapılandırmaları için nasıl alternatif kaynaklar sağlayabileceğiniz dahil).
Google Play'deki filtreler
Google Play Store'un, uygulamanızın farklı cihazlara yüklenmesini engellemek için kullanabileceği farklı yöntemler hakkında bilgiler.
Android'de izinler
Android'in, uygulamanızın bu API'leri kullanabilmesi için kullanıcıdan izin almasını gerektiren bir izin sistemiyle belirli API'lere uygulama erişimini nasıl kısıtladığı.