Uygulamanızı Google Play'de yayınlarsanız bir Android App Bundle oluşturup yüklemeniz gerekir. Bunu yaptığınızda, Google Play otomatik olarak her kullanıcının cihaz yapılandırmasına göre optimize edilmiş APK'lar oluşturur ve sunar. Böylece kullanıcılar yalnızca uygulamanızı çalıştırmak için gereken kod ve kaynakları indirir. Birden fazla APK yayınlamak, Google Play'de yayınlamadığınız durumlarda yararlı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 her biri farklı cihaz yapılandırmalarını hedefleyen farklı APK'lar yayınlamanıza olanak tanıyan bir özelliktir. Her APK, uygulamanızın tam ve bağımsız bir sürümüdür ancak Google Play'de aynı uygulama girişini paylaşır. Ayrıca aynı paket adını paylaşmalı ve aynı sürüm anahtarıyla imzalanmalıdır. Bu özellik, uygulamanızın tek bir APK ile istenen tüm cihazlara erişemediği durumlarda yararlıdır.
Android destekli cihazlar çeşitli yönlerden farklılık gösterebilir ve uygulamanızın başarısı için mümkün olduğunca fazla cihazda kullanıma sunulması önemlidir. Android uygulamaları genellikle farklı yapılandırmalar için alternatif kaynaklar (örneğin, farklı ekran boyutları için farklı düzenler) sağlayarak tek bir APK ile çoğu uyumlu cihazda çalışır ve Android sistemi, çalışma zamanında cihaz için uygun kaynakları seçer. Bununla birlikte, bazı durumlarda tek bir APK tüm cihaz yapılandırmalarını destekleyemez. Bunun nedeni, alternatif kaynakların APK dosyasının çok büyük olmasına yol açması veya diğer teknik sorunların tek bir APK'nın tüm cihazlarda çalışmasını engellemesidir.
Google Play, uygulamanızı mümkün olduğunca çok cihaz için yayınlamanıza yardımcı olmak amacıyla aynı uygulama listesi altında birden fazla APK yayınlamanıza olanak tanır. Google Play daha sonra her APK'nın manifest dosyasında beyan ettiğiniz yapılandırma desteğine göre her APK'yı uygun cihazlara sağlar.
Uygulamanızı birden fazla APK ile yayınlayarak:
- Her APK ile farklı OpenGL doku sıkıştırma biçimlerini destekleme.
- Her APK ile farklı ekran boyutlarını ve yoğunluklarını destekleyin.
- Her APK ile farklı cihaz özelliği gruplarını destekleme
- Her APK ile farklı platform sürümlerini destekleme
- Her APK ile farklı CPU mimarilerini destekleyin (uygulamanız Android NDK kullanıyorsa ARM veya x86 için olduğu gibi).
- Android (Go sürümü) çalıştıranlar gibi giriş düzeyindeki cihazlar için optimize edin.
Şu anda Google Play, aynı uygulama olarak birden fazla APK yayınlamak için yalnızca bu cihaz özelliklerini destekler.
Not: Google Play'de APK'ları hazırlama ve yayınlama hakkında bilgi edinmek için Sürümleri hazırlama ve kullanıma sunma destek makalesine bakın.
Birden fazla APK'nın işleyiş şekli
Google Play'de birden fazla APK kullanmanın konsepti, Google Play'de uygulamanız için tek bir girişiniz olması, ancak farklı cihazların farklı bir APK indirebilmesidir. Bunun anlamı şudur:
- Yalnızca bir grup ürün ayrıntısı (uygulama açıklaması, simgeler, ekran görüntüleri vb.) sağlarsınız. Bu ayrıca, farklı APK'lar için farklı bir fiyattan alamayacağınız anlamına da gelir.
- Tüm kullanıcılar Google Play'de uygulamanızın yalnızca bir sürümünü görür, dolayısıyla yayınlamış olabileceğiniz "tabletler için" veya "telefonlar için" farklı sürümleriyle karıştırılmazlar.
- Farklı cihazlardaki kullanıcıların farklı APK'ları olsa bile, tüm kullanıcı yorumları aynı uygulama girişine uygulanır.
- Android'in farklı sürümleri için farklı APK'lar yayınlarsanız (farklı API düzeyleri için) bir kullanıcının cihazı, yayınladığınız farklı bir APK için nitelendirilebilecek bir sistem güncellemesi aldığında, Google Play kullanıcının uygulamasını Android'in yüksek sürümü için tasarlanmış APK ile günceller. Uygulamayla ilişkilendirilen sistem verileri saklanır (tek bir APK kullanılırken normal uygulama güncellemeleriyle aynı şekilde).
Desteklenen filtreler
Her APK'yı hangi cihazların alacağı, her APK'nın manifest dosyasındaki öğeler tarafından belirtilen Google Play filtreleri tarafından belirlenir. Ancak, Google Play yalnızca her bir APK aşağıdaki cihaz özelliklerinin bir varyasyonunu 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 dayanır.Örneğin, OpenGL ES kullanan bir oyun geliştirirken, ATI doku sıkıştırmayı destekleyen cihazlar için bir APK ve PowerVR sıkıştırmayı destekleyen cihazlar için ayrı bir APK (diğer pek çok cihazın yanı sıra) 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. Hiçbir zaman iki öğeyi de kullanmamanız ve mümkün olduğunda yalnızca<supports-screens>
kullanmanız gerekir.Örneğin, küçük ve normal boyutlu ekranları destekleyen bir APK ile büyük ve xlarge 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 Çok APK Oluşturma bölümüne gidin.
Tüm ekran boyutlarını desteklemek için aşağıdaki en iyi uygulamaları göz önünde bulundurun:
- Android sistemi, tek bir APK ile tüm ekran yapılandırmalarını destekleyen uygulamalara yönelik güçlü destek sağlar. Mutlaka gerekli olmadığı sürece farklı ekranları destekleyen birden fazla APK oluşturmaktan kaçınmalı, uygulamanızın esnek olması ve tek bir APK ile tüm ekran yapılandırmalarına uyum sağlaması için Birden Fazla Ekranı Destekleme kılavuzundaki adımları uygulamalısınız.
- Aksi beyan etmezseniz
<supports-screens>
öğesindeki tüm ekran boyutu özellikleri varsayılan olarak "true" olur. Bununla birlikte,android:xlargeScreens
özelliği Android 2.3'te (API düzeyi 9) eklendiğinden, uygulamanızandroid:minSdkVersion
veyaandroid:targetSdkVersion
özelliğini "9" ya da daha yüksek bir değere ayarlamazsa Google Play, değerin "false" (yanlış) olduğunu varsayar. - Manifest dosyanızda hem
<supports-screens>
hem de<compatible-screens>
öğelerini birleştirmemeniz gerekir. İkisini birden kullanmak, ikisi arasındaki çakışmalar nedeniyle hata verme olasılığınızı artırır. Hangisini kullanacağınıza karar verme konusunda yardım almak için Belirli Ekranlara Dağıtma bölümünü okuyun. İkisini de kullanmaktan kaçınamıyorsanız belirli bir boyut arasındaki uyuşmazlıkta "false" değerinin kazanacağını unutmayın.
- Cihaz özelliği grupları
Bu, manifest dosyanızın
<uses-feature>
öğelerine bağlıdır.Örneğin, çoklu dokunmayı destekleyen cihazlar için bir APK ve çoklu dokunmayı desteklemeyen cihazlar için başka bir APK sağlayabilirsiniz. Platform tarafından desteklenen özelliklerin listesi için Özellikler Referansı'na göz atın.
- 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">
beyan etmesi, en az API Düzeyi 26'yı hedeflemesi ve Go dışı sürüm 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 bağlıdır. Farklı API seviyelerinin desteklenmesini belirtmek için hemandroid:minSdkVersion
hem deandroid:maxSdkVersion
özelliklerini kullanabilirsiniz.Örneğin, uygulamanızı API düzeyi 16 - 19'u destekleyen bir APK (Android 4.1.x - 4.4.4) ile (yalnızca API düzeyi 16 veya daha alt sürümden itibaren kullanılabilen API'leri kullanarak) ve API düzeyi 21 veya daha düşükten beri mevcut olan API'leri kullanarak (Android 5.0 ve sonraki sürümler) başka bir APK ile yayınlayabilirsiniz. Her biri farklı API aralığını hedefleyen ayrı APK'lar oluşturmayı öğrenmek için Ürün Aromalarını Yapılandırın bölümüne gidin.
Birden fazla APK'yı ayırt etmek için bu özelliği faktör olarak kullanırsanız daha yüksek
android:minSdkVersion
değerine sahip APK'nın daha yüksekandroid:versionCode
değerine sahip olması gerekir. Bu durum, iki APK'nın desteklenen farklı bir filtreye dayanarak cihaz desteğiyle çakıştığı durumlarda da geçerlidir. Bu, bir cihaz sistem güncellemesi aldığında Google Play'in kullanıcıya uygulamanız için bir güncelleme sunmasını sağlar (güncellemeler uygulama sürüm kodundaki bir artışı temel aldığından). Bu gereksinim, aşağıdaki Birden fazla APK için kurallar bölümünde daha ayrıntılı bir şekilde açıklanmaktadır.Uygulamanızı herkese açık API'lerle doğru şekilde geliştirdiğiniz sürece bu uygulama her zaman Android'in gelecekteki sürümleriyle uyumludur. Bu nedenle, genel olarak
android:maxSdkVersion
kullanmaktan kaçınmalısınız. Daha yüksek API seviyeleri için farklı bir APK yayınlamak istediğinizde de maksimum sürümü belirtmeniz gerekmez. Bunun nedeni,android:minSdkVersion
bir APK'da"16"
, bir başkasında"21"
ise API düzeyi 21 veya üstünü destekleyen cihazlar her zaman ikinci APK'yı alacaktır (çünkü sürüm kodu, önceki nota göre daha yüksek olacaktır). - CPU mimarisi (ABI)
Bazı yerel kitaplıklar, belirli CPU mimarileri veya Uygulama İkili 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 bu ABI için ihtiyacınız olan kitaplıkları dahil edebilirsiniz. Hedef ABI'ye göre ayrı APK'lar oluşturma hakkında daha fazla bilgi edinmek için Birden Çok APK Oluşturma bölümüne gidin.
Google Play filtrelerini etkinleştiren ancak yukarıda listelenmeyen diğer manifest öğeleri her APK için her zamanki gibi yine de uygulanır. Ancak Google Play, bu cihaz özelliklerinin varyasyonlarına dayalı ayrı APK'lar yayınlamanıza izin vermez. Dolayısıyla, yukarıda listelenen filtreler her bir APK için aynıysa birden fazla APK yayınlayamazsınız (ancak APK'lar, manifest veya APK'daki diğer özelliklere göre farklılık gösterir). Örneğin, yalnızca <uses-configuration>
özellikleriyle ilgili farklı APK'lar sağlayamazsınız.
Birden çok 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ı bir destek beyanında bulunmalıdır.
Genellikle APK'larınızı belirli bir özelliğe (desteklenen doku sıkıştırma biçimleri gibi) göre farklılaştırırsınız ve bu nedenle her APK farklı cihazları desteklediğini beyan eder. Ancak destekleriyle biraz örtüşen birden fazla APK yayınlayabilirsiniz. İki APK çakıştığında (aynı cihaz yapılandırmalarından bazılarını desteklerler) bu çakışan aralığa denk gelen bir cihaz, APK'yı daha yüksek sürüm koduna (
android:versionCode
ile tanımlanır) sahip alır. - Yerini aldığı APK'dan daha düşük sürüm koduna sahip yeni bir APK'yı etkinleştiremezsiniz. Örneğin, küçük (
0400
) sürüm koduna sahip normal bir ekran boyutu için etkin bir APK'nız olduğunu varsayalım. Ardından, aynı ekran boyutları için0300
sürüm koduna sahip bir APK ile değiştirmeyi deneyin. Bu durum, önceki APK'nın kullanıcılarının uygulamayı güncelleyemeyeceği anlamına geldiğinden hata oluşturur. - Daha yüksek API düzeyi gerektiren bir APK'nın daha yüksek sürüm koduna sahip olması gerekir.
Bu durum yalnızca: APK'lar yalnızca desteklenen API düzeylerine göre farklılık gösterdiği (desteklenen diğer filtreler APK'ları birbirinden ayırt etmediği) veya desteklenen başka bir filtre kullandığı ancak ilgili filtredeki APK'lar arasında çakışma olduğu durumlarda geçerlidir.
Bu önemlidir, çünkü bir kullanıcı cihazı Google Play'den yalnızca Google Play'deki APK'nın sürüm kodunun cihazdaki APK'nın sürüm kodundan daha yüksek olması durumunda uygulama güncellemesi alır. Bu sayede cihaz, APK'yı daha yüksek API seviyeleri için yüklemeye uygun olan bir sistem güncellemesi alırsa sürüm kodu arttığı için uygulama güncellemesi alır.
Not: Sürüm kodu artışının boyutu önemli değildir; daha yüksek API seviyelerini destekleyen sürümde daha büyük olması yeterlidir.
Bazı örnekler:
- API düzeyleri 16 ve üzeri (Android 4.1.x+) için yüklediğiniz bir APK'nın sürüm kodu
0400
ise, API düzeyleri 21 ve üzeri (Android 5.0 ve sonraki sürümler) için APK,0401
veya üzeri olmalıdır. Bu durumda, desteklenen tek filtre API düzeyidir. Dolayısıyla sürüm kodlarının, her APK için API düzeyi desteğiyle ilişkili olarak artırılması gerekir. Böylece, kullanıcılar sistem güncellemesi aldıklarında güncelleme alırlar. - API düzeyi 16 (ve üzeri) ve küçük (büyük) ekranlar için olan bir APK'nız ve API düzeyi 21 (ve üzeri) (ve üzeri) için başka bir APK'nız ve büyük - xlarge ekranlar için başka bir APK'nız varsa sürüm kodlarının API düzeyleriyle ilişkisinde artması gerekir. Bu durumda her APK'yı ayırt etmek için API düzeyi filtresi kullanılır ancak ekran boyutu da farklıdır. Ekran boyutları çakıştığından (her iki APK da büyük ekranları desteklediğinden) sürüm kodları yine de sıralı olmalıdır. Bu, API düzeyi 21'e sistem güncellemesi alan büyük ekranlı bir cihazın ikinci APK için bir güncelleme almasını sağlar.
- API düzeyi 16 (ve üzeri) ve küçük normal ekranlar için olan bir APK'nız ve API düzeyi 21 (ve üzeri) ile büyük x büyük ekranlar için başka bir APK'nız varsa sürüm kodlarının API düzeyleriyle korelasyon açısından artması gerekmez. Ekran boyutu filtresinde çakışma olmadığından bu iki APK arasında geçiş yapma ihtimali olan bir cihaz yoktur. Bu nedenle, sürüm kodlarının alt API düzeyinden üst API seviyesine çıkmasına gerek yoktur.
- 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ının API düzeyleriyle ilişkisinde artması gerekir. 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ına sahip bir APK, ARMv7 CPU'ya sahip cihazlarla uyumlu olduğundan APK'lar bu özellikle çakışır. Bu nedenle, API düzeyi 21 ve üstünü destekleyen APK'nın sürüm kodu daha yüksek olmalıdır. Bu şekilde, API düzeyi 21'e sistem güncellemesi alan ARMv7 CPU'ya sahip bir cihazın, API düzeyi 21 için tasarlanmış ikinci APK için güncelleme alması sağlanır. Ancak bu tür bir güncelleme, ARMv7 cihazının, cihazın CPU'su için tam olarak optimize edilmemiş bir APK kullanmasına yol açtığından, uygulama performansını her CPU'da optimize etmek amacıyla her API düzeyinde hem ARMv5TE hem de ARMv7 mimarisi için bir APK sağlamanız gerekir. Not: Bu durum yalnızca APK'lar ARMv5TE ve ARMv7 kitaplıklarıyla karşılaştırılırken geçerlidir, diğer yerel kitaplıklar karşılaştırılırken geçerli değildir.
- API düzeyleri 16 ve üzeri (Android 4.1.x+) için yüklediğiniz bir APK'nın sürüm kodu
Yukarıdaki kurallara uyulmaması, APK'larınızı etkinleştirdiğinizde Google Play Console'da hataya neden olur. Hatayı düzeltene kadar uygulamanızı yayınlayamazsınız.
APK'larınızı etkinleştirdiğinizde oluşabilecek başka çakışmalar da vardır, ancak bunlar hata yerine uyarı verir. Uyarılar aşağıdaki nedenlerden kaynaklanabilir:
- Bir APK'yı, cihaz özellik desteğini"daraltacak" şekilde değiştirdiğinizde ve başka hiçbir APK, desteklenen aralığın dışında kalan cihazları desteklemez. Örneğin, bir APK şu anda küçük ve normal boyutlu ekranları destekliyorsa ve onu yalnızca küçük ekranları destekleyecek şekilde değiştirirseniz, desteklenen cihazlar havuzunu küçültmüş olursunuz ve bazı cihazlar artık uygulamanızı Google Play'de görmez. Normal boyutlu ekranları destekleyen başka bir APK ekleyerek bu sorunu çözebilirsiniz. Böylece, önceden desteklenen tüm cihazlar desteklenmeye devam eder.
- İki veya daha fazla APK arasında "çakışma" 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 xlarge boyutlarını desteklerse her iki APK de büyük ekranları desteklediğinden bir çakışma olur. Bu sorunu çözmezseniz her iki APK için de uygun olan cihazlar (örnekteki büyük ekranlı cihazlar), en yüksek sürüm koduna sahip olan APK'yı alır.
Not: Farklı CPU mimarileri için ayrı APK'lar oluşturuyorsanız ARMv5TE için bir APK'nın, ARMv7'ye yönelik bir APK ile çakışacağını unutmayın. Diğer bir deyişle, ARMv5TE için tasarlanmış bir APK, ARMv7 cihazıyla uyumludur ancak bunun tersi geçerli değildir (Yalnızca ARMv7 kitaplıkları içeren bir APK, ARMv5TE cihazıyla uyumlu değildir).
Bu tür çakışmalar meydana geldiğinde bir uyarı mesajı gösterilir, ancak uygulamanızı yine de yayınlayabilirsiniz.
Birden fazla APK oluşturma
Birden fazla APK yayınlamaya karar verdiğinizde, yayınlamak istediğiniz her APK için ayrı Android projeleri oluşturmanız gerekebilir. Böylece, bunları uygun şekilde ayrı ayrı geliştirebilirsiniz. Mevcut projenizi kopyalayarak ve projeye yeni bir ad vererek bunu yapabilirsiniz. (Alternatif olarak, derleme yapılandırmasına göre farklı kaynaklar (ör. dokular) üretebilen bir derleme sistemi kullanabilirsiniz.)
İpucu: Uygulama kodunuzun büyük bir kısmının kopyalanmasını önlemenin yollarından biri, kitaplık projesi kullanmaktır. Kitaplık projesi, gerçek uygulama projelerinize ekleyebileceğiniz paylaşılan kod ve kaynakları barındırır.
Aynı uygulama için birden fazla proje oluştururken projeleri kolayca ayırt edebilmeniz için her projeye APK'ya uygulanacak cihaz kısıtlamalarını belirten bir ad vermek iyi bir uygulamadır. Örneğin, "HelloWorld_21", API düzeyi 21 ve üzeri için tasarlanmış bir uygulama için 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 kodu atama konusunda dikkatli olmalısınız. Çünkü her birinin farklı olması gerekir ancak bazı durumlarda her APK'nın desteklediği yapılandırmalara göre belirli bir sırada tanımlanmalıdır veya tanımlanmalıdır.
Sürüm kodlarını sipariş etme
Daha yüksek API düzeyi gerektiren APK'ların genellikle daha yüksek sürüm koduna sahip olması gerekir. Örneğin, farklı API düzeylerini desteklemek için iki APK oluşturursanız daha yüksek API düzeylerine ait APK'nın daha yüksek sürüm koduna sahip olması gerekir. Bu, bir cihazın APK'yı daha yüksek API seviyeleri için yüklemeye uygun olacağı bir sistem güncellemesi aldığında, uygulamanın güncellenmesi için kullanıcının bir bildirim almasını sağlar. Bu gereksinimin nasıl uygulandığıyla ilgili daha fazla bilgi için yukarıdaki Birden fazla APK için kurallar bölümüne bakın.
Sürüm kodlarının sırasının, farklı APK'ların kapsamı arasındaki çakışma veya gelecekte APK'larınızda yapabileceğiniz değişiklikler nedeniyle kullanıcılarınızın hangi APK'yı alacağını nasıl etkileyebileceğini de göz önünde bulundurmalısınız.
Örneğin, ekran boyutuna dayalı farklı APK'larınız varsa (örneğin, küçük - normal ve büyük - xlarge için bir APK'nız varsa, ancak APK'ları bir küçük ve normal (xlarge) için bir olacak şekilde değiştireceğiniz bir zaman öngörüyorsanız büyük - xlarge APK'nın sürüm kodunu daha yüksek yapmanız gerekir. Bu şekilde, değişikliği yaptığınızda normal boyutlu bir cihaz uygun güncellemeyi alır. Çünkü sürüm kodu mevcut APK'dan artık cihazı destekleyen yeni APK'ya çıkar.
Ayrıca, farklı OpenGL doku sıkıştırma biçimleri desteğine göre farklılık gösteren birden fazla APK oluştururken birçok cihazın birden fazla biçimi desteklediğini unutmayın. Bir cihaz, iki APK arasında kapsam çakışması olduğunda en yüksek sürüm koduna sahip APK'yı aldığından, sürüm kodlarını APK'larınız arasında sıralayarak tercih edilen sıkıştırma biçimine sahip APK'nın en yüksek sürüm koduna sahip olmasını sağlamanı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 ederseniz PVRTC'yi kullanan APK en yüksek sürüm koduna, ATITC kullanan APK'nın daha düşük, ETC1'e sahip APK'nın ise en düşük sürüm koduna sahip olması gerekir. Dolayısıyla, bir cihaz hem PVRTC'yi hem de ETC1'i destekliyorsa en yüksek sürüm koduna sahip olduğu için PVRTC'yi alır.
Google Play Store'un bir hedef cihaz için yüklenecek doğru APK'yı belirleyememesi durumunda, desteklemek istediğiniz tüm farklı cihaz varyasyonlarıyla ilgili kaynakları içeren evrensel bir APK oluşturmak da isteyebilirsiniz. Evrensel bir APK sağlarsanız buna 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 geri dönmeden önce diğer APK'larınızdan birini yüklemeyi denemesini sağlar.
Sürüm kodu şeması kullanma
Farklı APK'ların sürüm kodlarını diğerlerinden bağımsız olarak güncellemelerine olanak tanımak için (örneğin, yalnızca bir APK'daki bir 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 artışa gerek kalmadan kodu artırabilirsiniz. Sürüm kodunu ve sürüm adını ilişkilendirmenizi kolaylaştırmak için koda gerçek sürüm adınızı (yani, android:versionName
'e atanan kullanıcı tarafından görülebilen sürüm) da 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üncellemelerden kaçınmak için, gerçekte değişiklik içermeyen APK'ların sürüm kodunu artırmamalısınız.
En az 7 basamaklı bir sürüm kodu kullanmanızı öneririz: Desteklenen yapılandırmaları temsil eden tam sayılar daha yüksek sıralamalı bitler, sürüm adı (android:versionName
'ten) ise alt sıradaki bitlerdir. Örneğin, uygulama sürümünün adı 3.1.0 olduğunda API düzeyi 4 APK'sının ve API düzeyi 11 APK'sının sürüm kodları sırasıyla 0400310 ve 1100310 olur. İlk iki basamak API Düzeyi (sırasıyla 4 ve 11), orta iki basamak ise ekran boyutları veya GL doku biçimleri (bu örneklerde kullanılmamıştır) içindir. Son üç basamak ise uygulamanın sürüm adı (3.1.0) içindir. Şekil 1'de hem platform sürümüne (API Düzeyi) hem de ekran boyutuna göre ayrılan iki örnek gösterilmektedir.
![](https://developer.android.google.cn/static/images/market/version-codes.png?authuser=19&hl=tr)
Şekil 1. Sürüm kodlarınız için önerilen şema; API Düzeyinin ilk iki basamağı, minimum ve maksimum ekran boyutu için ikinci ve üçüncü basamaklar (dört boyutun her birini belirtir) veya doku biçimlerini ve uygulama sürümünün son üç basamağı kullanılır.
Sürüm kodlarına ilişkin bu şema, uygulamanız geliştikçe ölçeklenebilir bir kalıp oluşturmanız gerektiği konusunda bir öneridir. Özellikle, bu şema farklı doku sıkıştırma biçimlerini tanımlamak için bir çözüm sunmaz. Seçeneklerden biri, uygulamanızın desteklediği farklı sıkıştırma biçimlerinin her biri için farklı bir tam sayı belirten kendi tablonuzu tanımlamak olabilir (örneğin, 1 değeri ETC1'e, 2 değeri 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 (örneğin, bir sistem güncellemesi nedeniyle) ya da APK'lardan bir veya birkaçının yapılandırma desteğini değiştirdiğinizde cihazların nasıl güncelleme alabileceğini dikkatlice değerlendirmelisiniz.