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ı kodu 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.
Android uygulamanızı Google Play'deki birden fazla APK'dan yararlanacak şekilde geliştirirken baştan bazı iyi uygulamaları benimsemek ve geliştirme sürecinin ilerleyen aşamalarında gereksiz baş ağrılarını önlemek önemlidir. Bu derste, uygulamanızın her biri farklı bir ekran boyutu sınıfını kapsayan birden fazla APK'sını nasıl oluşturacağınız gösterilmektedir. Ayrıca, birden fazla APK kod tabanını mümkün olduğunca sorunsuz bir şekilde yönetmek için gerekli bazı araçlara da sahip olursunuz.
Birden fazla APK'ya ihtiyacınız olduğunu onaylama
Birden fazla Android cihaz boyutunda çalışacak bir uygulama oluştururken, uygulamanızın daha büyük cihazlardaki mevcut tüm alandan yararlanmasını, ancak daha küçük ekranlardaki uyumluluktan veya kullanılabilirlikten ödün vermemesini istersiniz. İlk başta birden fazla APK desteğinin en iyi çözüm olduğu düşünülebilir ancak bu genellikle doğru değildir. Birden fazla APK geliştirici kılavuzunun Tek APK Kullanma bölümünde, destek kitaplığımızın kullanımı da dahil olmak üzere bunu tek bir APK ile nasıl yapacağınızla ilgili bazı faydalı bilgiler yer alır. Birden fazla ekranı destekleme kılavuzunu da okumanız gerekir. Android SDK'sını kullanarak indirebileceğiniz bir destek kitaplığı da vardır. Bu kitaplık, Honeycomb öncesi cihazlarda parçaları kullanmanıza olanak tanır (tek bir APK'da birden fazla ekran desteğini çok daha kolay hale getirir).
Uygulamanızı tek bir APK ile sınırlandırmanın aşağıdakiler gibi çeşitli avantajları vardır:
- Yayınlama ve test etme daha kolaydır
- Yalnızca bir kod tabanı vardır.
- Uygulamanız, cihaz yapılandırması değişikliklerine uyum sağlayabilir
- Cihazlar arasında uygulama geri yükleme işlemi sorunsuzdur
- Pazar tercihi, bir APK'dan diğerine "yükseltme" davranışı veya hangi APK'nın hangi cihaz sınıfıyla uyumlu olduğu konusunda endişelenmenize gerek yoktur.
Bu dersin geri kalanında, konuyu araştırdığınız, bağlantı verilen kaynaklardaki materyalleri dikkatlice incelediğiniz ve uygulamanız için birden fazla APK'nın doğru yol olduğunu belirlediğiniz varsayılmaktadır.
Gereksinimlerinizi grafikle gösterin
Kaç APK'ya ihtiyacınız olduğunu ve her APK'nın hangi ekran boyutlarını kapsadığını hızlıca belirlemek için basit bir grafik oluşturarak başlayın. Neyse ki ihtiyaçlarınızı hızlı ve kolay bir şekilde listeleyip daha sonra referans olarak kullanabilirsiniz. Android platformunda bulunan çeşitli ekran boyutlarını temsil eden bir hücre satırı ile başlayın.
küçük | normal | büyük | xlarge |
Artık grafiği, her rengin bir APK'yı temsil edecek şekilde renklendirebilirsiniz. Aşağıda, her APK'yı belirli bir ekran boyutu aralığına nasıl uygulayabileceğinize dair bir örnek verilmiştir.
küçük | normal | büyük | xlarge |
İhtiyaçlarınıza bağlı olarak "küçük ve diğer her şey" veya "çok büyük ve diğer her şey" şeklinde iki APK'nız da olabilir. Grafikte renklendirme yapmak, ekip içi iletişimi de kolaylaştırır. Artık her APK'yı, kapsadığı farklı ekran türleri ne olursa olsun "mavi", "yeşil" veya "kırmızı" olarak adlandırabilirsiniz.
Ortak kod ve kaynakların tümünü bir kitaplık projesine yerleştirme
Mevcut bir Android uygulamasını değiştiriyor veya sıfırdan bir uygulama başlatıyor olsanız da kod tabanında yapmanız gereken ilk şey budur ve bu, en önemli adımdır. Kitaplık projesine eklenen her şeyin yalnızca bir kez güncellenmesi gerekir (dil yerelleştirilmiş dizeler, renk temaları, paylaşılan kodda düzeltilen hatalar gibi). Bu, geliştirme sürenizi kısaltır ve kolayca önlenebilen hata olasılığını azaltır.
Not: Kitaplık projelerinin nasıl oluşturulacağı ve dahil edileceğiyle ilgili uygulama ayrıntıları bu dersin kapsamı dışındadır. Android kitaplığı oluşturma başlıklı makaleyi okuyarak bu konuda bilgi edinebilirsiniz.
Mevcut bir uygulamayı birden fazla APK desteğini kullanacak şekilde dönüştürüyorsanız kod tabanınızda, APK'lar arasında değişmeyecek her yerelleştirilmiş dize dosyası, değer listesi, tema rengi, menü simgesi ve yerleşimi bulun ve hepsini kitaplık projesine ekleyin. Çok fazla değişiklik olmayacak kodlar da kitaplık projesine eklenmelidir. APK'dan APK'ya bir veya iki yöntem eklemek için bu sınıfları genişletmeniz gerekebilir.
Öte yandan, uygulamayı sıfırdan oluşturuyorsanız mümkün olduğunca önce kitaplık projesinde kod yazmayı deneyin. Ardından, yalnızca gerekirse kodu ayrı bir APK'ya taşıyın. Bu, uzun vadede bir klasöre, sonra başka bir klasöre, sonra başka bir klasöre eklemekten ve aylarca sonra bu blob'un herhangi bir soruna yol açmadan kitaplık bölümüne taşınıp taşınamayacağını anlamaya çalışmaktan çok daha kolaydır.
Yeni APK projeleri oluşturma
Yayınlayacağınız her APK için ayrı bir Android projesi olmalıdır. Kolay düzenleme için kitaplık projesini ve ilgili tüm APK projelerini aynı üst klasörün altına yerleştirin. Ayrıca, her APK'nın aynı paket adına sahip olması gerekir ancak paket adını kitaplıkla paylaşmaları gerekmez. Daha önce açıklanan şemaya göre 3 APK'nız varsa kök dizininiz şöyle görünebilir:
alexlucas:~/code/multi-apks-root$ ls foo-blue foo-green foo-lib foo-red
Projeler oluşturulduktan sonra kitaplık projesini her APK projesine referans olarak ekleyin. Mümkünse başlangıç etkinliğinizi kitaplık projesinde tanımlayın ve APK projenizde bu etkinliği genişletin. Kitaplık projesinde tanımlanmış bir başlangıç etkinliği olması, uygulamanızın tüm ilklendirme işlemlerini tek bir yere yerleştirmenize olanak tanır. Böylece, her APK'nın Analytics'i başlatma, lisanslama kontrolleri yapma ve APK'lar arasında çok fazla değişiklik göstermeyen diğer ilklendirme işlemlerini yeniden uygulamak zorunda kalmaz.
Manifestleri ayarlama
Kullanıcı Google Play üzerinden birden fazla APK kullanan bir uygulama indirdiğinde, kullanılacak doğru APK iki basit kural kullanılarak seçilir:
- Manifest'te, söz konusu APK'nın uygun olduğu gösterilmelidir.
- Uygun APK'lar arasında en yüksek sürüm numarası kazanır
Örnek olarak, daha önce açıklanan birden fazla APK grubunu ele alalım ve her APK'nın "hedef" ekran boyutundan daha büyük tüm ekran boyutlarını destekleyecek şekilde ayarlandığını varsayalım. Her APK'nın olası aralığı tek tek şöyle görünür:
küçük | normal | büyük | xlarge |
küçük | normal | büyük | xlarge |
küçük | normal | büyük | xlarge |
Ancak "en yüksek sürüm numarası kazanır" kuralını kullanarak her APK'da versionCode özelliğini kırmızı ≥ yeşil ≥ mavi olacak şekilde ayarlarsak grafik etkili bir şekilde şu şekilde daraltılır:
küçük | normal | büyük | xlarge |
Şimdi de Kırmızı APK'nın, diğer iki APK'da bulunmayan bazı şartlara sahip olduğunu varsayalım. Android Geliştirici Kılavuzu'nun Google Play'deki Filtreler sayfasında, olası nedenlerin tamamı listelenmiştir. Örnek olarak, kırmızının ön kamera gerektirdiğini varsayalım. Aslında, kırmızı APK'nın amacı, ön kamerayla eğlenceli şeyler yapmak için mevcut ekstra ekran alanını kullanmaktır. Ancak, büyük boyutlu cihazların hepsinde ön kamera bile yok. Korkunç bir durum.
Neyse ki, kullanıcı bu tür bir cihazdan Google Play'e göz atıyorsa Google Play manifest dosyasını inceler, Red'in ön kamerayı şart olarak listelediğini görür ve Red ile söz konusu cihazın dijital cennette bir eşleşme olmadığını belirledikten sonra uygulamayı sessizce yoksayar. Ardından, yeşilin yalnızca büyük cihazlarla uyumlu olmadığını, ön kamera olup olmadığının da önemli olmadığını görür. Ön kamerayla ilgili soruna rağmen, söz konusu ekran boyutunu destekleyen bir APK olduğu için uygulama kullanıcı tarafından Google Play'den indirilebilir.
Tüm APK'larınızı ayrı "kanallarda" tutmak için iyi bir sürüm kodu şemasına sahip olmanız önemlidir. Önerilen sürümü, geliştirici kılavuzumuzun Sürüm Kodları bölümünde bulabilirsiniz. Örnek APK grubu yalnızca 3 olası boyuttan biriyle ilgilendiğinden, her APK'yı 1.000'e ayırıp buradan artırmak yeterli olacaktır. Bu şöyle görünebilir:
Mavi: 1001, 1002, 1003, 1004...
Yeşil: 2001, 2002, 2003, 2004...
Kırmızı:3001, 3002, 3003, 3004...
Tüm bunları bir araya getirdiğimizde Android manifest'leriniz muhtemelen aşağıdaki gibi görünür:
Mavi:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" /> ...
Yeşil:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="true" android:xlargeScreens="true" /> ...
Kırmızı:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="3001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="false" android:xlargeScreens="true" /> ...
Teknik olarak birden fazla APK'nın, supports-screens veya compatible-screens etiketiyle çalışacağını unutmayın. Genellikle Supports-screens tercih edilir ve aynı manifest dosyasında her iki etiketi de kullanmak genellikle çok kötü bir fikirdir. Bu, işleri gereksiz yere karmaşık hale getirir ve hata olasılığını artırır. Ayrıca, varsayılan değerlerden (küçük ve normal varsayılan olarak her zaman doğrudur) yararlanmak yerine manifest dosyalarının her ekran boyutu için değeri açıkça belirlediğini unutmayın. Bu sayede ileride baş ağrısı yaşamazsınız. Örneğin, hedef SDK'sı 9'dan küçük bir manifest dosyasında xlarge boyutu henüz mevcut olmadığından otomatik olarak yanlış olarak ayarlanır. Bu nedenle açık olun.
Lansman öncesi yapılacaklar listenizi inceleme
Google Play'e yüklemeden önce aşağıdaki öğeleri tekrar kontrol edin. Bu noktaların özellikle birden fazla APK ile ilgili olduğunu ve Google Play'e yüklenen tüm uygulamalar için eksiksiz bir yapılacaklar listesi olmadığını unutmayın.
- Tüm APK'ların paket adı aynı olmalıdır.
- Tüm APK'lar aynı sertifikayla imzalanmalıdır.
- APK'nızın desteklemesini istediğiniz her ekran boyutu, manifest dosyasında true olarak ayarlanır. Kaçınmasını istediğiniz her ekran boyutu yanlış olarak ayarlanır.
- Manifest filtrelerinizi çelişen bilgiler açısından tekrar kontrol edin (XLARGE ekranlarda yalnızca Cupcake'i destekleyen bir APK kimse tarafından görülmez).
- Her APK'nın manifest dosyası, desteklenen ekran, OpenGL dokusu veya platform sürümlerinden en az birinde benzersiz olmalıdır.
- Her APK'yı en az bir cihazda test etmeyi deneyin. Bunun dışında, geliştirme makinenizde sektördeki en özelleştirilebilir cihaz emülatörlerinden birine sahipsiniz. İyi eğlenceler.
Ayrıca, uygulamanızı Google Play'de gizleyebilecek sürprizler olmadığından emin olmak için derlenmiş APK'yı pazara dağıtmadan önce incelemeniz de önerilir. Bu işlem, "aapt" aracını kullanarak oldukça basittir. Aapt (Android Öğe Paketleme Aracı), Android uygulamalarınızı oluşturma ve paketleme işleminin bir parçasıdır. Ayrıca, uygulamaları incelemek için çok kullanışlı bir araçtır.
>aapt dump badging package: name='com.example.hello' versionCode='1' versionName='1.0' sdkVersion:'11' uses-permission:'android.permission.SEND_SMS' application-label:'Hello' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application: label='Hello' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.example.hello.HelloActivity' label='Hello' icon='' uses-feature:'android.hardware.telephony' uses-feature:'android.hardware.touchscreen' main supports-screens: 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240'
aapt çıkışını incelerken supports-screens ve compatible-screens için çakışan değerlere sahip olmadığınızdan ve manifest dosyasında ayarladığınız izinler sonucunda eklenen istenmeyen "uses-feature" değerlerine sahip olmadığınızdan emin olun. Yukarıdaki örnekte, APK tüm cihazlarda olmasa da çoğu cihazda görünmez.
Neden? Gerekli SEND_SMS izni eklendiğinde android.hardware.telephony özelliğinin koşulu dolaylı olarak eklendi. xlarge ekran boyutuna sahip cihazların çoğu (tümü olmasa da) telefon donanımına sahip olmayan tabletler olduğundan Google Play, bu tür durumlarda bu APK'yı filtreler. Gelecekte hem xlarge ekran boyutu olarak raporlanacak kadar büyük hem de telefon donanımına sahip cihazlar piyasaya çıkana kadar bu durum devam edecektir.
Neyse ki bu sorun, manifest dosyanıza aşağıdakileri ekleyerek kolayca düzeltilebilir:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
android.hardware.touchscreen
koşulu da dolaylı olarak eklenir. APK'nızın dokunmatik ekranlı olmayan TV'lerde görünmesini istiyorsanız manifest dosyanıza aşağıdakileri eklemeniz gerekir:
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
Lansman öncesi yapılacaklar listesini tamamladıktan sonra APK'larınızı Google Play'e yükleyin. Google Play'e göz atarken uygulamanın görünmesi biraz zaman alabilir. Uygulama göründüğünde son bir kontrol yapın. APK'ların amaçlanan cihazları hedeflediğinden emin olmak için uygulamayı sahip olabileceğiniz tüm test cihazlarına indirin.
Google Play'de birden fazla APK yayınlama hakkında daha fazla bilgi için Birden fazla APK desteği başlıklı makaleyi inceleyin.