Farklı ekran boyutları için birden fazla APK oluşturma

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.

Google Play'deki birden fazla APK'dan yararlanmak için Android uygulamanızı geliştirirken, bazı iyi uygulamaları başından itibaren benimsemek ve geliştirme sürecinin gereksiz yere sorun yaşamasını önlemek önemlidir. Bu derste, uygulamanız için her biri farklı ekran boyutu sınıfını kapsayan birden fazla APK'yı nasıl oluşturacağınız gösterilmektedir. Ayrıca, birden fazla APK kod tabanını mümkün olduğunca zahmetsiz hale getirmek için gereken bazı araçları da alacaksınız.

Birden fazla APK'ya ihtiyacınız olduğunu onaylayın

Farklı boyutlardaki Android cihazlarında çalışan bir uygulama oluşturmaya çalışırken, doğal olarak uygulamanızın daha küçük ekranlarda uyumluluktan veya kullanılabilirlikten ödün vermeden daha büyük cihazlardaki kullanılabilir alandan faydalanmasını istersiniz. Başlangıçta birden fazla APK desteği en iyi çözüm gibi görünebilir, ancak çoğu zaman durum böyle değildir. Birden fazla APK geliştirici kılavuzunun Tek APK'yı Kullanma bölümünde, destek kitaplığımızın kullanımı da dahil olmak üzere, bunu tek bir APK ile nasıl gerçekleştirebileceğinize dair bazı yararlı bilgiler yer almaktadır. Ayrıca, birden fazla ekranı destekleme ile ilgili kılavuzu okumalısınız. Ayrıca, Android SDK'yı kullanarak indirebileceğiniz bir destek kitaplığı bile vardır. Bu kitaplık, Honeycomb öncesi cihazlarda parçalar kullanmanıza olanak tanır (tek bir APK'da çoklu ekran desteğini çok daha kolay hale getirir).

Bunu yönetebiliyorsanız, uygulamanızı tek bir APK ile sınırlandırmanın çeşitli avantajları vardır. Örneğin:

  • Yayınlama ve test etmek daha kolaydır
  • Yönetmeniz gereken yalnızca bir kod tabanı vardır
  • Uygulamanız cihaz yapılandırma değişikliklerine uyum sağlayabilir
  • Cihazlar arasında uygulama geri yükleme işlevi sorunsuz çalışıyor
  • Pazar tercihi, bir APK'dan bir sonrakine "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ılı kaynaklardaki materyali ustaca kullandığınız ve birden fazla APK'nın uygulamanız için doğru yol olduğuna karar verdiğiniz varsayılmaktadır.

Gereksinimlerinizin grafiğini belirleyin

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 gereksinimlerinizi hızlı ve kolay bir şekilde ortaya koyabilir, daha sonra kullanmak için bir referansa sahip olabilirsiniz. Android platformunda bulunan çeşitli ekran boyutlarını temsil eden bir hücre satırıyla başlayın.

küçük normal büyük xlarge

Şimdi grafikte her renk bir APK'yı temsil edecek şekilde renklendirir. Her APK'yı belirli bir ekran boyutu aralığına nasıl uygulayabileceğinize dair bir örneği aşağıda bulabilirsiniz.

küçük normal büyük xlarge

İhtiyaçlarınıza bağlı olarak, "küçük ve diğer her şey" veya "xlarge ve diğer her şey" olmak üzere iki APK'nız da olabilir. Grafikteki renklendirme, ekip içi iletişimi de kolaylaştırır. Artık kaç farklı ekran türünü kapsadığından bağımsız olarak her bir APK'ya "mavi", "yeşil" veya "kırmızı" adını verebilirsiniz.

Tüm ortak kodları ve kaynakları bir kitaplık projesine yerleştirin

İster mevcut bir Android uygulamasında değişiklik yapıyor olun ister sıfırdan yeni bir uygulamaya başlayın, kod tabanı için yapmanız gereken ilk şey ve en önemlisi budur. Kitaplık projesine giren her şeyin yalnızca bir kez güncellenmesi gerekir (ör. dile göre yerelleştirilmiş dizeler, renk temaları, paylaşılan kodda düzeltilen hatalar). Bu, geliştirme sürenizi iyileştirir ve kolayca önlenebilecek hataların olasılığını azaltır.

Not: Kitaplık projelerinin nasıl oluşturulacağı ve dahil edileceğine ilişkin uygulama ayrıntıları bu dersin kapsamı dışında olsa da, Android Kitaplığı Oluşturma konusunu okuyarak bilgi edinebilirsiniz.

Mevcut bir uygulamayı birden fazla APK desteği kullanacak şekilde dönüştürüyorsanız yerelleştirilmiş her bir dize dosyası, değer listesi, tema renkleri, APK'lar arasında değişmeyecek menü simgeleri ve düzen için kod tabanınızı temizleyin ve tümünü kitaplık projesine yerleştirin. Çok fazla değişmeyecek bir kod, kitaplık projesine de eklenmelidir. Bu sınıfların kapsamını APK'dan APK'ya bir veya iki yöntem ekleyerek genişlettiğinizi fark edebilirsiniz.

Öte yandan, uygulamayı sıfırdan oluşturuyorsanız önce kitaplık projesinde mümkün olduğunca çok kod yazmaya çalışın, ardından gerekirse kodu ayrı bir APK'ya taşıyın. Uzun vadede bunu yönetmek, bir yere, bir başkasına ve sonra bir başkasına eklemekten ve aylar sonra bu blob'un herhangi bir değişiklik yapmadan 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, paket adını kitaplıkla paylaşmaları gerekli olmasa da her APK'nın aynı paket adına sahip olması gerektiğini de unutmayın. 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, kitaplık projesinde başlangıç Etkinliğinizi tanımlayın ve bu Etkinliği APK projenizde genişletin. Kitaplık projesinde tanımlı bir başlangıç etkinliğinin olması, tüm uygulama başlatma işlemlerinizi tek bir yere koymanıza olanak tanır. Böylece her bir APK'nın Analytics'i başlatma, lisans kontrollerini çalıştırma ve APK'dan APK'ya pek değişmeyen diğer başlatma prosedürleri gibi "evrensel" görevleri yeniden uygulaması gerekmez.

Manifestleri ayarlama

Bir kullanıcı Google Play üzerinden birden fazla APK kullanan bir uygulama indirdiğinde, iki basit kural kullanılarak kullanılacak doğru APK seçilir:

  • Manifest, ilgili APK'nın bunun için uygun olduğunu göstermelidir.
  • Uygun APK'lar arasından en yüksek sürüm numarası kazanır

Örnek vermek gerekirse, daha önce açıklanan birden fazla APK grubunu ele alalım ve her APK'nın, "hedef" ekran boyutundan büyük tüm ekran boyutlarını destekleyecek şekilde ayarlandığını varsayalım. Tek tek ele alındığında, her bir APK'nın olası aralığı şö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

Bununla birlikte, "en yüksek sürüm numarası kazanan" kuralını kullanarak her APK'da versionCode özelliğini kırmızı ≥ yeşil ≥ mavi olacak şekilde belirlersek grafik etkin biçimde şu şekilde daraltılır:

küçük normal büyük xlarge

Şimdi, Red APK'da bununla ilgili diğer ikisinde bulunmayan bir gereksinim olduğunu varsayalım. Android Geliştirici kılavuzunun Google Play'deki filtreler sayfasında olası nedenlerin kapsamlı bir listesi bulunmaktadır. Örnek olması açısından, kırmızı renkli cihazın öne bakan bir kamera gerektirdiğini varsayalım. Aslında, kırmızı APK'nın amacı, ön taraftaki kamerayla eğlenceli şeyler yapmak için ekstra mevcut ekran alanını kullanmaktır. Ancak, tüm büyük cihazların hepsinde ön kamera VAR! Korku dolu!

Neyse ki, bir kullanıcı bu tür bir cihazdan Google Play'e göz atıyorsa Google Play bu manifeste bakar, Red'in bir zorunluluk olarak ön kamera listesini listelediğini görür ve Kırmızı ile o cihazın dijital cennet gibi bir eşleşme olmadığını belirleyerek bu durumu sessizce göz ardı eder. Bu durumda, Yeşil'in yalnızca büyük ekranlarla uyumlu olmadığını, aynı zamanda ön kameranın olup olmamasının da önemini umursamadığını görüyor. Ön kameradaki talihsizliklere rağmen hâlâ söz konusu ekran boyutunu destekleyen bir APK vardı. Bu nedenle uygulama kullanıcı tarafından Google Play'den indirilebiliyor.

Tüm APK'larınızı ayrı "kanallarda" tutmak için iyi bir sürüm kodu şemasına sahip olmanız önemlidir. Önerilen kodu, geliştirici kılavuzumuzun Sürüm Kodları alanında bulabilirsiniz. Örnek APK grubu yalnızca 3 olası boyuttan birini işlediği için her APK'yı 1000'le ayırmak ve oradan artırmak yeterli olur. Bu, aşağıdaki gibi görünebilir:

Mavi: 1001, 1002, 1003, 1004...
Yeşil: 2001, 2002, 2003, 2004...
Kırmızı:3001, 3002, 3003, 3004...

Bunların tümü bir araya getirildiğinde 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 Support-screen etiketi veya uyumlu ekran etiketiyle çalışacağını unutmayın. "Ekranların desteklenmesi" genellikle tercih edilir. Ancak her iki etiketi de aynı manifestte kullanmak genellikle kötü bir fikirdir. İşleri gereksiz ölçüde karmaşık hale getirir ve hata olasılığını artırır. Ayrıca, manifestlerin varsayılan değerlerden (küçük ve normal varsayılan olarak her zaman doğrudur) yararlanmak yerine her ekran boyutu için değeri açıkça ayarladığını unutmayın. Böylece, zamanla ilgili sıkıntılardan kurtulabilirsiniz. Örneğin, hedef SDK'sı 9'dan küçük olan bir manifestte xlarge otomatik olarak "false" (yanlış) değerine ayarlanır, çünkü bu boyut henüz mevcut değildir. Açık olun.

Lansman öncesi yapılacaklar listenizi inceleyin

Google Play'e yüklemeden önce aşağıdaki öğeleri tekrar kontrol edin. Bunların özellikle birden fazla APK ile ilgili olduğunu ve hiçbir şekilde Google Play'e yüklenen tüm uygulamalar için eksiksiz bir kontrol listesini temsil etmediğini unutmayın.

  • Tüm APK'lar aynı paket adına sahip 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 (doğru) değerine ayarlanır. Kaçınmak istediğiniz her ekran boyutunu "false" (yanlış) değerine ayarlayın
  • Çakışan bilgiler olup olmadığını görmek için manifest filtrelerinizi tekrar kontrol edin (sadece XLARGE ekranlarında cupcake'i destekleyen bir APK'yı hiç kimse görmez)
  • Her APK'nın manifesti, desteklenen ekran, OpenGL dokusu veya platform sürümünün en az birinde benzersiz olmalıdır
  • Her APK'yı en az bir cihazda test etmeye çalışın. Bunun dışında, geliştirme makinenizde, işletmedeki en özelleştirilebilir cihaz emülatörlerinden birine sahipsiniz. Hay aksi!

Ayrıca, uygulamanızı Google Play'de gizleyebilecek herhangi bir sürpriz olmadığından emin olmak için, derlenen APK'yı piyasaya sunmadan önce incelemek de iyi bir fikirdir. Bu, "aapt" aracını kullanmak oldukça basittir. Aapt (Android Asset Packaging Aracı), Android uygulamalarınızı oluşturma ve paketleme sürecinin bir parçasıdır ve bunları incelemek için de ç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 çıktısını incelerken, desteklenen ekranlar ve uyumlu ekranlar için çakışan değerlerin olmadığından ve manifest'te ayarladığınız izinler sonucunda eklenen, istenmeyen "uses-feature" değerlerinin yer almadığından emin olun. Yukarıdaki örnekte APK, tüm cihazlar veya çoğu cihaz tarafından görülemez.

Neden? Gerekli izin SEND_SMS eklenerek, android.hardware.telephony için özellik gereksinimi örtülü bir şekilde eklenmiştir. xlarge cihazların çoğu (tümü değilse) içinde telefon donanımı bulunmayan tabletler olduğundan Google Play, ileride xlarge ekran boyutu olarak raporlayacak kadar büyük ve telefon donanımına sahip cihazlar gelene kadar bu gibi durumlarda APK'yı filtreler.

Neyse ki, manifest dosyanıza aşağıdakileri ekleyerek bu sorunu kolayca çözebilirsiniz:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

android.hardware.touchscreen koşulu da dolaylı yoldan eklenmiştir. APK'nızın dokunmatik ekran olmayan cihazlar olan TV'lerde görünür olmasını istiyorsanız manifest dosyanıza şunu 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. Uygulamanın Google Play'e göz atarken görünmesi biraz zaman alabilir, ancak göründüğünde son bir kontrol daha yapın. APK'ların hedeflenen cihazları hedeflediğinden emin olmak için uygulamayı tüm test cihazlarına indirin.

Google Play'de birden fazla APK yayınlama hakkında daha fazla bilgi edinmek için Birden fazla APK desteği konusunu okuyun.