Birden fazla APK desteği

Uygulamanızı Google Play'de yayınlarsanız bir Android App Bundle oluşturmanız ve yüklemeniz gerekir. Bunu yaptığınızda Google Play, her kullanıcının cihaz yapılandırması için otomatik olarak optimize edilmiş APK'lar oluşturur ve sunar. Böylece kullanıcılar yalnızca uygulamanızı çalıştırmak için ihtiyaç duydukları kod ve kaynakları indirir. Google Play'de yayınlamıyorsanız birden fazla APK yayınlamak faydalıdır ancak her APK'yı kendiniz oluşturmanız, imzalamanız ve yönetmeniz gerekir.

Birden fazla APK desteği, Google Play'de uygulamanız için farklı cihaz yapılandırmalarını hedefleyen farklı APK'lar yayınlamanıza olanak tanıyan bir özelliktir. Her APK, uygulamanızın eksiksiz ve bağımsız bir sürümüdür ancak Google Play'de aynı uygulama listelemesini paylaşır, aynı paket adını taşır ve aynı sürüm anahtarıyla imzalanmalıdır. Bu özellik, uygulamanızın tek bir APK ile istenen tüm cihazlara ulaşamadığı durumlarda kullanışlıdır.

Android destekli cihazlar çeşitli şekillerde farklılık gösterebilir. Uygulamanızın mümkün olduğunca çok cihazda kullanılabilmesi, başarısı açısından önemlidir. Android uygulamaları genellikle uyumlu cihazların çoğunda tek bir APK ile çalışır. Farklı yapılandırmalar için alternatif kaynaklar (ör. farklı ekran boyutları için farklı düzenler) sağlanır ve Android sistemi, çalışma zamanında cihaz için uygun kaynakları seçer. Bununla birlikte, alternatif kaynaklar APK dosyasını çok büyük hale getirdiği veya diğer teknik zorluklar tek bir APK'nın tüm cihazlarda çalışmasını engellediği için bazı durumlarda tek bir APK tüm cihaz yapılandırmalarını destekleyemez.

Google Play, uygulamanızı mümkün olduğunca çok cihazda yayınlamanıza yardımcı olmak için aynı uygulama girişi altında birden fazla APK yayınlamanıza olanak tanır. Ardından Google Play, her APK'nın manifest dosyasında belirttiğiniz yapılandırma desteğine göre her APK'yı uygun cihazlara sağlar.

Uygulamanızı birden fazla APK ile yayınlayarak şunları yapabilirsiniz:

  • Her APK'da farklı OpenGL doku sıkıştırma biçimlerini destekleyin.
  • Her APK'da farklı ekran boyutlarını ve yoğunluklarını destekleyin.
  • Her APK ile farklı cihaz özellik gruplarını destekleyin.
  • Her APK ile farklı platform sürümlerini destekleyin.
  • Her APK'da farklı CPU mimarilerini destekleyin (ör. uygulamanız Android NDK kullandığında ARM veya x86 için).
  • Android (Go sürümü) çalıştıranlar gibi giriş düzeyindeki cihazlar için optimize edin.

Google Play şu anda aynı uygulama olarak birden fazla APK yayınlamak için yalnızca bu cihaz özelliklerini desteklemektedir.

Not: Google Play'de APK hazırlama ve yayınlama hakkında bilgi edinmek için Sürüm hazırlama ve kullanıma sunma başlıklı destek makalesine bakın.

Birden fazla APK'nın işleyiş şekli

Google Play'de birden fazla APK kullanmanın temelinde, uygulamanız için Google Play'de yalnızca bir girişiniz olduğu ancak farklı cihazların farklı APK'lar indirebileceği fikri vardır. Bunun anlamı:

  • Yalnızca bir ürün ayrıntıları grubu (uygulama açıklaması, simgeler, ekran görüntüleri vb.) kullanırsınız. Bu aynı zamanda farklı APK'lar için farklı bir fiyat alamazsınız.
  • Tüm kullanıcılar Google Play'de uygulamanızın yalnızca bir sürümünü görür. Böylece, yayınlamış olabileceğiniz "tabletler için" veya "telefonlar için" farklı sürümler kafalarını karıştırmaz.
  • Farklı cihazlardaki kullanıcıların farklı APK'ları olsa bile tüm kullanıcı yorumları aynı uygulama listelemesine uygulanır.
  • Android'in farklı sürümleri için farklı APK'lar (farklı API düzeyleri için) yayınlarsanız kullanıcının cihazı, yayınladığınız farklı bir APK'yı kullanmaya uygun hale getiren bir sistem güncellemesi aldığında Google Play, kullanıcının uygulamasını Android'in daha yüksek sürümü için tasarlanmış APK ile günceller. Uygulamayla ilişkili tüm sistem verileri saklanır (tek bir APK kullanılırken normal uygulama güncellemelerinde olduğu gibi).

Desteklenen filtreler

Her APK'nın hangi cihazlara gönderileceği, her APK'nın manifest dosyasında öğelerle belirtilen Google Play filtreleri tarafından belirlenir. Ancak Google Play, yalnızca her APK aşağıdaki cihaz özelliklerinin bir varyantını desteklemek için filtreler kullandığında birden fazla APK yayınlamanıza izin verir:

  • OpenGL doku sıkıştırma biçimleri

    Bu, manifest dosyanızın <supports-gl-texture> öğelerine bağlıdır.

    Örneğin, OpenGL ES kullanan bir oyun geliştirirken ATI doku sıkıştırmasını destekleyen cihazlar için bir APK ve PowerVR sıkıştırmasını destekleyen cihazlar için ayrı bir APK sağlayabilirsiniz.

  • Ekran boyutu (ve isteğe bağlı olarak ekran yoğunluğu)

    Bu, manifest dosyanızın <supports-screens> veya <compatible-screens> öğesine bağlıdır. İki öğeyi de hiçbir zaman kullanmamalısınız ve mümkün olduğunda yalnızca <supports-screens> öğesini kullanmalısınız.

    Örneğin, küçük ve normal boyutlu ekranları destekleyen bir APK ile büyük ve ekstra büyük ekranları destekleyen başka bir APK sağlayabilirsiniz. Ekran boyutuna veya yoğunluğuna göre ayrı APK'lar oluşturma hakkında daha fazla bilgi edinmek için Birden fazla APK oluşturma başlıklı makaleyi inceleyin.

    Tüm ekran boyutlarını desteklemek için aşağıdaki en iyi uygulamalardan yararlanabilirsiniz:

    • Android sistemi, uygulamaların tek bir APK ile tüm ekran yapılandırmalarını desteklemesi için güçlü destek sağlar. Kesinlikle gerekli olmadığı sürece farklı ekranları desteklemek için birden fazla APK oluşturmaktan kaçınmalısınız. Bunun yerine, uygulamanızın esnek olması ve tek bir APK ile tüm ekran yapılandırmalarına uyum sağlayabilmesi için Çoklu Ekranları Destekleme kılavuzunu uygulamalısınız.
    • Aksini belirtmediğiniz sürece <supports-screens> öğesindeki tüm ekran boyutu özellikleri varsayılan olarak "true" değerine sahiptir. Ancak android:xlargeScreens özelliği Android 2.3'e (API düzeyi 9) eklendiğinden, uygulamanız android:minSdkVersion veya android:targetSdkVersion değerini "9" veya daha yüksek bir değere ayarlamazsa Google Play bu özelliğin "false" olduğunu varsayar.
    • Manifest dosyanızda <supports-screens> ve <compatible-screens> öğelerini birlikte kullanmamalısınız. İkisini de kullanmak, aralarındaki çatışmalar nedeniyle hata yapma olasılığınızı artırır. Hangisini kullanacağınıza karar verme konusunda yardım almak için Belirli Ekranlara Dağıtım başlıklı makaleyi inceleyin. Her ikisini de kullanmaktan kaçınamıyorsanız belirli bir boyutla ilgili sözleşmedeki tüm çakışmalarda "false" değerinin geçerli olacağını unutmayın.

  • Cihaz özellik grupları

    Bu, manifest dosyanızın <uses-feature> öğelerine dayanır.

    Örneğin, çoklu dokunmayı destekleyen cihazlar için bir APK, çoklu dokunmayı desteklemeyen cihazlar için başka bir APK sağlayabilirsiniz. Platform tarafından desteklenen özelliklerin listesini Özellikler Referansı'nda bulabilirsiniz.

  • Android (Go sürümü)

    Android (Go sürümü) çalıştıran cihazları hedeflemek için APK'nızın <uses-feature android:name="android.hardware.ram.low" android:required="true"> bildirmesi, en az API düzeyi 26'yı hedeflemesi ve Go sürümü olmayan APK'nızdan daha yüksek bir sürüm koduna sahip olması gerekir.

  • API düzeyi

    Bu, manifest dosyanızın <uses-sdk> öğesine dayanır. Farklı API düzeyleri için desteği belirtmek üzere hem android:minSdkVersion hem de android:maxSdkVersion özelliklerini kullanabilirsiniz.

    Örneğin, uygulamanızı API düzeyi 16 - 19'u (Android 4.1.x - 4.4.4) destekleyen bir APK ile (yalnızca API düzeyi 16 veya daha düşük sürümlerde kullanılabilen API'leri kullanarak) ve API düzeyi 21 ve sonraki sürümleri (Android 5.0 ve sonraki sürümler) destekleyen başka bir APK ile (yalnızca API düzeyi 21 veya daha düşük sürümlerde kullanılabilen API'leri kullanarak) yayınlayabilirsiniz. Her biri farklı bir API aralığını hedefleyen ayrı APK'ları nasıl oluşturacağınızı öğrenmek için Ürün lezzetlerini yapılandırma başlıklı makaleyi inceleyin.

    Bu özelliği birden fazla APK'yı ayırt etmek için kullanırsanız daha yüksek android:minSdkVersion değerine sahip APK'nın daha yüksek android:versionCode değerine sahip olması gerekir. Bu durum, farklı bir desteklenen filtreye göre cihaz desteğinin çakıştığı iki APK için de geçerlidir. Bu sayede, bir cihaz sistem güncellemesi aldığında Google Play, kullanıcıya uygulamanızla ilgili bir güncelleme sunabilir (güncellemeler uygulama sürüm kodunda yapılan bir artışa bağlı olduğundan). Bu şart, aşağıdaki Çoklu APK'lar için kurallar bölümünde daha ayrıntılı olarak açıklanmıştır.

    Genel olarak android:maxSdkVersion kullanmamaya dikkat edin. Çünkü uygulamanızı herkese açık API'lerle doğru şekilde geliştirdiğiniz sürece, uygulamanız Android'in gelecekteki sürümleriyle her zaman uyumlu olur. Daha yüksek API düzeyleri için farklı bir APK yayınlamak isterseniz yine de maksimum sürümü belirtmeniz gerekmez. Çünkü android:minSdkVersion bir APK'da "16", diğerinde "21" ise API düzeyi 21 veya üstünü destekleyen cihazlar her zaman ikinci APK'yı alır (önceki notta belirtildiği gibi sürüm kodu daha yüksek olduğu için).


  • CPU mimarisi (ABI)

    Bazı yerel kitaplıklar, belirli CPU mimarileri veya uygulama ikili arabirimleri (ABI'ler) için ayrı paketler sağlar. Mevcut tüm kitaplıkları tek bir APK'da paketlemek yerine her ABI için ayrı bir APK oluşturabilir ve yalnızca ilgili ABI için ihtiyaç duyduğunuz kitaplıkları ekleyebilirsiniz. Hedef ABI'ye göre ayrı APK'lar oluşturma hakkında daha fazla bilgi edinmek için Birden fazla APK oluşturma başlıklı makaleyi inceleyin.

Google Play filtrelerini etkinleştiren ancak yukarıda listelenmeyen diğer manifest öğeleri, her APK için her zamanki gibi uygulanmaya devam eder. Ancak Google Play, bu cihaz özelliklerinin varyasyonlarına göre ayrı APK'lar yayınlamanıza izin vermez. Bu nedenle, yukarıda listelenen filtreler her APK için aynıysa (ancak APK'lar manifest veya APK'daki diğer özelliklere göre farklıysa) birden fazla APK yayınlayamazsınız. Örneğin, yalnızca <uses-configuration> özelliklerinde farklılık gösteren farklı APK'lar sağlayamazsınız.

Birden fazla APK için kurallar

Uygulamanız için birden fazla APK yayınlamadan önce aşağıdaki kuralları anlamanız gerekir:

  • Aynı uygulama için yayınladığınız tüm APK'lar aynı paket adına sahip olmalı ve aynı sertifika anahtarıyla imzalanmalıdır.
  • Her APK'nın android:versionCode özelliğiyle belirtilen farklı bir sürüm kodu olmalıdır.
  • Her APK, başka bir APK'nın yapılandırma desteğiyle tam olarak eşleşmemelidir.

    Yani her APK, desteklenen Google Play filtrelerinden (yukarıda listelenmiştir) en az biri için biraz farklı destek belirtmelidir.

    Genellikle APK'larınızı belirli bir özelliğe (ör. desteklenen doku sıkıştırma biçimleri) göre ayırırsınız. Böylece her APK farklı cihazlar için destek beyan eder. Ancak, destekleri biraz örtüşen birden fazla APK yayınlamak sorun oluşturmaz. İki APK çakıştığında (aynı cihaz yapılandırmalarının bir kısmını destekliyorsa), bu çakışma aralığına giren bir cihaz, daha yüksek sürüm koduna sahip APK'yı (android:versionCode ile tanımlanır) alır.

  • Değiştirdiği APK'nın sürüm kodundan daha düşük sürüm koduna sahip yeni bir APK etkinleştiremezsiniz. Örneğin, 0400 sürüm koduna sahip küçük - normal ekran boyutları için etkin bir APK'nız olduğunu varsayalım. Ardından, bu APK'yı aynı ekran boyutları için 0300 sürüm koduna sahip bir APK ile değiştirmeyi deneyin. Bu, önceki APK'nın kullanıcılarının uygulamayı güncelleyemeyeceği anlamına geldiği için hata meydana gelir.
  • Daha yüksek bir API düzeyi gerektiren APK'ların daha yüksek sürüm kodlarına sahip olması gerekir.

    Bu durum yalnızca APK'lar yalnızca desteklenen API seviyelerine göre farklı olduğunda (APK'ları birbirinden ayıran başka desteklenen filtre yoktur) veya APK'lar başka bir desteklenen filtre kullansa da bu filtredeki APK'lar arasında çakışma olduğunda geçerlidir.

    Bu, kullanıcının cihazının Google Play'den uygulama güncellemesi alması için yalnızca Google Play'deki APK'nın sürüm kodunun, cihazdaki APK'nın sürüm kodundan daha yüksek olması gerektiğinden önemlidir. Bu sayede, bir cihaz daha yüksek API düzeyleri için APK yüklemeye uygun hale getiren bir sistem güncellemesi alırsa sürüm kodu arttığı için cihaza bir uygulama güncellemesi gönderilir.

    Not: Sürüm kodunun artışı ne kadar büyük olursa olsun fark etmez. Kodun, daha yüksek API düzeylerini destekleyen sürümde daha büyük olması yeterlidir.

    Aşağıda bazı örnekler verilmiştir:

    • 16 ve sonraki API düzeyleri (Android 4.1.x+) için yüklediğiniz bir APK'nın sürüm kodu 0400 ise 21 ve sonraki API düzeyleri (Android 5.0+) için yüklediğiniz APK'nın sürüm kodu 0401 veya daha yüksek olmalıdır. Bu durumda, API düzeyi kullanılan tek desteklenen filtredir. Bu nedenle, kullanıcıların sistem güncellemesi aldığında güncelleme alabilmesi için sürüm kodlarının her APK'nın API düzeyi desteğiyle ilişkili olarak artması gerekir.
    • API düzeyi 16 (ve üzeri) ve küçük - büyük ekranlar için bir APK'nız ve API düzeyi 21 (ve üzeri) ve büyük - çok büyük ekranlar için başka bir APK'nız varsa sürüm kodları, API düzeyleriyle ilişkili olarak artmalıdır. Bu durumda, her APK'yı ayırt etmek için API düzeyi filtresi kullanılır ancak ekran boyutu da kullanılır. Ekran boyutları çakıştığından (her iki APK da büyük ekranları destekler) sürüm kodları yine de sırayla olmalıdır. Bu sayede, API düzeyi 21'e yükseltilen sistem güncellemesi alan büyük ekranlı bir cihaz, ikinci APK için de güncelleme alır.
    • API düzeyi 16 (ve üzeri) ve küçük - normal ekranlar için bir APK'nız ve API düzeyi 21 (ve üzeri) ve büyük - çok büyük ekranlar için başka bir APK'nız varsa sürüm kodlarının API düzeyleriyle ilişkili olarak artırılması gerekmez. Ekran boyutu filtresinde çakışma olmadığından bu iki APK arasında geçiş yapabilecek cihaz yoktur. Bu nedenle, sürüm kodlarının daha düşük API düzeyinden daha yüksek API düzeyine yükseltilmesi gerekmez.
    • API düzeyi 16 (ve üzeri) ve ARMv7 CPU'lar için bir APK'nız ve API düzeyi 21 (ve üzeri) ve ARMv5TE CPU'lar için başka bir APK'nız varsa sürüm kodları, API düzeyleriyle ilişkili olarak artmalıdır. Bu durumda, her APK'yı ayırt etmek için API düzeyi filtresi kullanılır ancak CPU mimarisi de kullanılır. ARMv5TE kitaplıkları içeren bir APK, ARMv7 CPU'ya sahip cihazlarla uyumlu olduğundan APK'lar bu özellik açısından örtüşüyor. Bu nedenle, API düzeyi 21 ve sonraki sürümleri destekleyen APK'nın sürüm kodu daha yüksek olmalıdır. Bu sayede, ARMv7 CPU'ya sahip ve API düzeyi 21'e yükseltilen bir sistem güncellemesi alan bir cihaz, API düzeyi 21 için tasarlanmış ikinci APK'nın güncellemesini alır. Ancak bu tür bir güncelleme, ARMv7 cihazın o cihazın CPU'su için tam olarak optimize edilmemiş bir APK kullanmasına neden olduğundan, her CPU'daki uygulama performansını optimize etmek için her API düzeyinde hem ARMv5TE hem de ARMv7 mimarisi için bir APK sağlamanız gerekir. Not: Bu durum, diğer yerel kitaplıklar karşılaştırılırken değil, yalnızca APK'lar ARMv5TE ve ARMv7 kitaplıklarıyla karşılaştırılırken geçerlidir.

Yukarıdaki kurallara uyulmaması, APK'larınızı etkinleştirdiğinizde Google Play Console'da bir hataya neden olur. Hatayı çözene kadar uygulamanızı yayınlayamazsınız.

APK'larınızı etkinleştirirken ortaya çıkabilecek, ancak hata yerine uyarıyla sonuçlanacak başka çakışmalar da vardır. Uyarıların nedenleri şunlardır:

  • Bir APK'yı, cihazın özelliklerine yönelik desteği"küçültecek" şekilde değiştirdiğinizde ve desteklenen aralığın dışında kalan cihazları başka hiçbir APK desteklemediğinde. Örneğin, bir APK şu anda küçük ve normal boyutlu ekranları destekliyorsa ve APK'yı yalnızca küçük ekranları destekleyecek şekilde değiştirirseniz desteklenen cihaz havuzunu küçültmüş olursunuz ve bazı cihazlar artık uygulamanızı Google Play'de görmez. Önceden desteklenen tüm cihazların desteklenmeye devam etmesi için normal boyutlu ekranları destekleyen başka bir APK ekleyerek bu sorunu çözebilirsiniz.
  • İki veya daha fazla APK arasında "çakışmalar" olduğunda. Örneğin, bir APK küçük, normal ve büyük ekran boyutlarını desteklerken başka bir APK büyük ve ekstra büyük boyutları destekliyorsa her iki APK da büyük ekranları desteklediği için çakışma vardır. Bu sorunu çözmezseniz her iki APK'ya da uygun olan cihazlar (örneğin, büyük ekranlı cihazlar), en yüksek sürüm koduna sahip APK'yı alır.

    Not: Farklı CPU mimarileri için ayrı APK'lar oluşturuyorsanız ARMv5TE için bir APK'nın ARMv7 için bir APK ile çakışacağını unutmayın. Yani ARMv5TE için tasarlanmış bir APK, ARMv7 cihazla uyumludur ancak bunun tersi doğru değildir (yalnızca ARMv7 kitaplıklarını içeren bir APK, ARMv5TE cihazla uyumlu değildir).

Bu tür çakışmalar olduğunda bir uyarı mesajı görürsünüz ancak uygulamanızı yayınlamaya devam edebilirsiniz.

Birden fazla APK oluşturma

Birden fazla APK yayınlamaya karar verdikten sonra, yayınlamayı planladığınız her APK için ayrı Android projeleri oluşturmanız gerekir. Böylece, APK'ları ayrı ayrı geliştirebilirsiniz. Bunu, mevcut projenizi kopyalayıp yeni bir ad vererek yapabilirsiniz. (Alternatif olarak, derleme yapılandırmasına bağlı olarak farklı kaynaklar (ör. dokular) oluşturabilen bir derleme sistemi kullanabilirsiniz.)

İpucu: Uygulama kodunuzun büyük bölümlerini kopyalamaktan kaçınmanın bir yolu kitaplık projesi kullanmaktır. Kitaplık projeleri, gerçek uygulama projelerinize dahil edebileceğiniz paylaşılan kod ve kaynaklar içerir.

Aynı uygulama için birden fazla proje oluştururken her birini APK'ya uygulanacak cihaz kısıtlamalarını belirten bir adla tanımlamak iyi bir uygulamadır. Böylece, projeleri kolayca ayırt edebilirsiniz. Örneğin, API düzeyi 21 ve üzeri için tasarlanmış bir uygulama için "MerhabaDünya_21" iyi bir ad olabilir.

Not: Aynı uygulama için yayınladığınız tüm APK'lar aynı paket adına sahip olmalı ve aynı sertifika anahtarıyla imzalanmalıdır. Birden fazla APK için kurallar'ın her birini de anladığınızdan emin olun.

Sürüm kodları atama

Aynı uygulamaya ait her APK'nın android:versionCode özelliğiyle belirtilen benzersiz bir sürüm kodu olmalıdır. Birden fazla APK yayınlarken sürüm kodlarını atarken dikkatli olmanız gerekir. Çünkü her APK'nın farklı olması gerekir ancak bazı durumlarda, her APK'nın desteklediği yapılandırmalara göre belirli bir sırada tanımlanması gerekir.

Sürüm kodlarını sıralama

Daha yüksek bir API düzeyi gerektiren APK'ların genellikle daha yüksek sürüm kodlarına sahip olması gerekir. Örneğin, farklı API düzeylerini desteklemek için iki APK oluşturursanız daha yüksek API düzeylerine yönelik APK'nın daha yüksek sürüm koduna sahip olması gerekir. Bu sayede, bir cihaz daha yüksek API düzeyleri için APK'yı yüklemeye uygun hale getiren bir sistem güncellemesi alırsa kullanıcıya uygulamayı güncellemesi için bir bildirim gönderilir. Bu şartın nasıl uygulandığı hakkında daha fazla bilgi için yukarıdaki Çoklu APK'lar için kurallar bölümüne bakın.

Ayrıca, sürüm kodlarının sırası farklı APK'ların kapsamı arasındaki çakışma veya APK'larınızda yapacağınız gelecekteki değişiklikler nedeniyle kullanıcılarınızın hangi APK'yı alacağını nasıl etkileyebileceğini de göz önünde bulundurmanız gerekir.

Örneğin, ekran boyutuna göre farklı APK'larınız varsa (ör. küçük - normal ve büyük - ekstra büyük için birer APK) ancak APK'ları küçük ve normal - ekstra büyük için birer APK olacak şekilde değiştireceğiniz bir zaman öngörüyorsanız büyük - ekstra büyük APK'nın sürüm kodunu daha yüksek yapmanız gerekir. Böylece, normal boyutlu bir cihaz, değişiklik yaptığınızda uygun güncellemeyi alır. Bunun nedeni, sürüm kodunun mevcut APK'dan artık cihazı destekleyen yeni APK'ya yükseltilmesidir.

Ayrıca, farklı OpenGL doku sıkıştırma biçimlerine göre farklı olan birden fazla APK oluştururken birçok cihazın birden fazla biçimi desteklediğini unutmayın. Bir cihaz, iki APK arasında kapsamda çakışma olduğunda en yüksek sürüm koduna sahip APK'yı aldığından, APK'larınızdaki sürüm kodlarını, tercih edilen sıkıştırma biçimine sahip APK'nın en yüksek sürüm koduna sahip olması için sıralamanız gerekir. Örneğin, PVRTC, ATITC ve ETC1 sıkıştırma biçimlerini kullanarak uygulamanız için ayrı derlemeler yapmak isteyebilirsiniz. Bu biçimleri tam olarak bu sırayla tercih ediyorsanız PVRTC kullanan APK'nın sürüm kodu en yüksek, ATITC kullanan APK'nın sürüm kodu daha düşük, ETC1 içeren sürümün sürüm kodu ise en düşük olmalıdır. Bu nedenle, bir cihaz hem PVRTC hem de ETC1'i destekliyorsa en yüksek sürüm koduna sahip olduğu için PVRTC içeren APK'yı alır.

Google Play Store, hedef cihaz için yüklenecek doğru APK'yı belirleyemezse desteklemek istediğiniz tüm farklı cihaz varyasyonlarının kaynaklarını içeren evrensel bir APK da oluşturabilirsiniz. Evrensel APK sağlarsanız en düşük versionCode değerini atamanız gerekir. Google Play Store, uygulamanızın hem hedef cihazla uyumlu hem de en yüksek versionCode değerine sahip sürümünü yüklediğinden, evrensel APK'ya daha düşük bir versionCode atamak, Google Play Store'un daha büyük evrensel APK'ya geçmeden önce diğer APK'larınızdan birini yüklemeye çalışmasını sağlar.

Sürüm kodu şeması kullanma

Farklı APK'ların sürüm kodlarını diğerlerinden bağımsız olarak güncellemesine izin vermek için (örneğin, yalnızca bir APK'daki hatayı düzelttiğinizde tüm APK'ları güncellemeniz gerekmez) sürüm kodlarınız için her APK arasında yeterli alan sağlayan bir şema kullanmanız gerekir. Böylece, diğer APK'larda kod yükseltme yapmadan bir APK'daki kodu yükseltebilirsiniz. Sürüm kodunu ve sürüm adını ilişkilendirmenizin kolay olması için koda gerçek sürüm adınızı da (yani android:versionName için atanan kullanıcı tarafından görülebilen sürüm) eklemeniz gerekir.

Not: Bir APK'nın sürüm kodunu artırdığınızda Google Play, önceki sürümün kullanıcılarından uygulamayı güncellemelerini ister. Bu nedenle, gereksiz güncellemeleri önlemek için aslında değişiklik içermeyen APK'ların sürüm kodunu artırmamanız gerekir.

En az 7 haneli bir sürüm kodu kullanmanızı öneririz: Desteklenen yapılandırmaları temsil eden tam sayılar daha yüksek değerli bitlerde, sürüm adı (android:versionName ile başlayan) ise daha düşük değerli bitlerde yer alır. Örneğin, uygulama sürümü adı 3.1.0 olduğunda API düzeyi 4 APK ve API düzeyi 11 APK için sürüm kodları sırasıyla 0400310 ve 1100310 gibi olur. İlk iki basamak API düzeyi için ayrılmıştır (sırasıyla 4 ve 11), ortadaki iki basamak ekran boyutları veya GL doku biçimleri içindir (bu örneklerde kullanılmaz) ve son üç basamak uygulamanın sürüm adı içindir (3.1.0). Şekil 1'de hem platform sürümüne (API düzeyi) hem de ekran boyutuna göre ayrılmış iki örnek gösterilmektedir.

Şekil 1. API düzeyi için ilk iki basamak, minimum ve maksimum ekran boyutu için ikinci ve üçüncü basamak (dört boyutun her birini belirten 1-4) veya doku biçimlerini belirtmek için son üç basamak ve uygulama sürümü için son üç basamak kullanılarak sürüm kodlarınız için önerilen bir şema.

Sürüm kodları için bu şema, uygulamanız geliştikçe ölçeklenebilir bir kalıp oluşturmanıza yönelik bir öneridir. Özellikle bu şema, farklı doku sıkıştırma biçimlerini tanımlamaya yönelik bir çözüm sunmaz. Bir seçenek, uygulamanızın desteklediği farklı sıkıştırma biçimlerinin her biri için farklı bir tam sayı belirten kendi tablonuzu tanımlamaktır (örneğin, 1 ETC1'e, 2 ise ATITC'ye karşılık gelebilir).

İstediğiniz şemayı kullanabilirsiniz ancak uygulamanızın gelecekteki sürümlerinin sürüm kodlarını nasıl artırması gerektiğini ve cihaz yapılandırması değiştiğinde (ör. sistem güncellemesi nedeniyle) veya APK'lardan biri ya da birkaçı için yapılandırma desteğini değiştirdiğinizde cihazların nasıl güncelleme alabileceğini dikkatlice değerlendirmeniz gerekir.