Birkaç boyutlu birden fazla APK oluşturma

Uygulamanızı Google Play'de yayınlıyorsanız bir Android App Bundle. Bunu yaptığınızda Google Play otomatik olarak Her kullanıcının cihaz yapılandırması için optimize edilmiş APK'lar oluşturur ve sunar, böylece kullanıcılar sadece indirme işlemini gerçekleştirir uygulamanızı çalıştırmak için gereken kod ve kaynakları içerir. Birden fazla APK yayınlamak istiyorsanız Google Play'de yayınlanmamaktadı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 itibaren 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 projenizi yönetmenize yardımcı olacak Birden fazla APK kod tabanının bakımını mümkün olduğunca zahmetsiz hale getirin.

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

Mevcut çok çeşitli Android cihazlarda çalışan bir uygulama oluşturmaya çalışırken doğal olarak uygulamanızın her cihazda en iyi şekilde görünmesini istersiniz. Büyük ekranların alanından yararlanmak ancak küçük ekranlarda çalışmaya devam etmek, en yeni cihazlarda bulunan yeni Android API özelliklerini veya görsel dokuları kullanmak ancak eski cihazları terk etmemek istiyorsunuz. Bu Başlangıçta birden fazla APK desteği en iyi çözüm gibi görünse de çoğu zaman bu mümkün değildir dava açın. Bunun yerine Tek APK Bunun yerine birden fazla APK kılavuzunun bölümü, destek kitaplığımızın kullanımı da dahil olmak üzere tüm bunları tek bir APK ile gerçekleştirebiliriz. ve kaynak bağlantıları hakkında daha fazla bilgi edinin.

Uygulamanızı yönetebiliyorsanız, uygulamanızı tek bir APK ile sınırlandırmanın birçok avantajı vardır. şunları içerir:

  • Yayınlama ve test etme artık daha kolay
  • Yönetmeniz gereken yalnızca bir kod tabanı vardır
  • Uygulamanız cihaz yapılandırma değişikliklerine uyum sağlayabilir
  • Uygulamaları cihazlar arasında kolayca geri yükleme
  • Pazar tercihi veya "yükseltmelerin" davranışları konusunda endişelenmenize gerek yoktur bir APK'dan hangi APK'nın hangi cihaz sınıfına gideceğini

Bu dersin geri kalanında, konuyu araştırdığınız ve ve birden fazla APK'nın uygulamanız için doğru yol olduğuna karar verdik bir uygulamadır.

Gereksinimlerinizi belirtin

Kaç APK'ya ihtiyacınız olduğunu ve hangi ekranın hazır olduğunu hızlıca belirlemek için basit bir grafik oluşturarak başlayın her APK'nın kapsadığı boyut/boyutlar. Neyse ki gereksinimlerinizi hızlı, kolay ve hızlı bir şekilde daha sonra kolayca başvurabileceğiniz bir kaynak olarak düşünebilirsiniz. APK'larınızı iki boyuta bölmek istediğinizi varsayalım: API ve ekran boyutu. Olası her değer çifti ve renk için satır ve sütun içeren bir tablo oluşturun bazı "blob'larda" her renk bir APK'yı temsil ediyor.

3 4 5 6 7 8 9 10 11 12 +
küçük
normal
büyük
xlarge

Yukarıda dört APK'nın yer aldığı bir örnek verilmiştir. Mavi tüm küçük/normal ekranlı cihazlar içindir, Yeşil ise büyük ekran içindir ekran cihazları, Kırmızı ise tümü 3-10 API aralığına sahip çok büyük ekranlı cihazlar içindir. Mor, yalnızca API 11 ve sonraki sürümleri için geçerli olduğundan, bu özellik tüm ekran boyutlarında geçerlidir. Daha da önemlisi, bu grafiğe baktığınızda, belirli bir API/ekran boyutu kombinasyonunu hangi APK'nın kapsadığını hemen anlarsınız. Alıcı: her biri için gösterişli kod adları vardır. Bunun nedeni " çok fazla "3 ila 10 x büyük APK'yı Xoom'a karşı test ettik mi?" diye sormaktan daha kolaydır. Bu grafiği yazdırıp kod tabanınızda çalışan herkese verin. Hayatınız artık çok daha kolay.

Ortak kod ve kaynakların tümünü bir kitaplık projesine yerleştirme

Mevcut bir Android uygulamasında değişiklik yaparken veya sıfırdan yeni bir uygulamada kod tabanı üzerinde yapmanız gereken ilk ve açık ara en önemlisi. Her şey sadece bir kez güncellenmesi gerekiyor (dille yerelleştirilmiş dizeler, renk temaları, paylaşılan kodda düzeltilen hatalar) içerir. Bu da geliştirme sürenizi kısaltır ve kaçınılması mümkün olan hata yapma olasılığını artırı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 değişmeyecek olan bir kod, kütüphane projesine de gidebilirim. Belki de bu süre içinde daha fazla sınıflarına ekleyerek APK'dan APK'ya bir veya iki yöntem ekleyebilirsiniz.

Diğer yandan, uygulamayı sıfırdan oluşturuyorsanız, ilk olarak kitaplık projesine kod yazmak için mümkün olduğunca çok yöntem kullanır, ardından yalnızca bir bağımsız APK'yı kullanın. Bunu yönetmek, uzun vadede bir kampanyaya eklemekten çok daha kolaydır. ardından bir diğeri, ardından aylar sonra bu blob'un yukarı doğru taşınıp taşınmayacağını anlamaya çalışarak kitaplık bölümüne eklemeye devam edebilirsiniz.

Yeni APK projeleri oluşturma

Yayınlayacağınız her APK için ayrı bir Android projesi olmalıdır. Kolaylık için kitaplık projesini ve ilgili tüm APK projelerini aynı üst klasöre yerleştirin. Ayrıca, her APK'nın aynı paket adına sahip olması gerektiğini unutmayın. paket adını kitaplıkla paylaşmalısınız. Şemayı izleyen 3 APK'nız olsaydı açıklandığı gibi, kök dizininiz şu şekilde görünebilir:

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-purple
foo-red

Projeler oluşturulduktan sonra kitaplık projesini her APK projesine referans olarak ekleyin. Eğer mümkün olduğunda, kitaplık projesinde başlangıç Etkinliğinizi tanımlayın ve APK'nızda bu Etkinliği genişletin. belirler. Kütüphane projesinde tanımlanmış bir başlangıç aktiviteniz olursa, size bu e-postadaki uygulamanızın başlatmasını tek bir yerde toplar, böylece her APK'nın “evrensel” yaklaşımını temel işlemleri başlatma, lisans kontrollerini yürütme başlatma prosedürlerinde aynıdır.

Manifestleri ayarlama

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

  • Manifest, belirli bir APK'nın uygun olduğunu göstermelidir.
  • Uygun APK'lar arasından en yüksek sürüm numaralı APK kazanır.

Örnek olarak, daha önce açıklanan birden fazla APK grubunu ve her bir APK'nın APK, "hedefi"nden büyük olan tüm ekran boyutlarını destekleyecek şekilde ayarlanmış ekran boyutu. Şimdi, örnek grafike dönelim:

3 4 5 6 7 8 9 10 11 12 +
küçük
normal
büyük
xlarge

Kapsamın çakışmasında bir sakınca olmadığından, her APK'nın kapsadığı alanı aşağıdaki gibi açıklayabiliriz: dolayısıyla:

  • Mavi, tüm ekranları kapsar, minSDK 3.
  • Yeşil, büyük ekranlar ve daha üst sürümleri (min.SDK 3) kapsar.
  • Kırmızı, XBüyük ekranları (genellikle tabletler) kapsar; en az 9 SDK'dır.
  • Mor, SDK 11 veya sonraki tüm ekranları kapsar.

Bu kuralların çok fazla örtüştüğünü unutmayın. Örneğin, API 11'e sahip XLarge cihaz, belirtilen 4 APK'dan herhangi birini çalıştırabilir. Ancak, "en yüksek sürüm numarası kazanır"ı kullanarak bu şekilde, 2008’e kadar şu şekilde bir tercih oluşturabilirsiniz:

Mor ≥ Kırmızı ≥ Yeşil ≥ Mavi

Tüm çakışmalara neden izin vermeli? Mor APK'nın, orijinal APK'nın bazıları değildir. Google Play'deki filtreler sayfası olası nedenlerini içeren tam listeyi inceleyebilirsiniz. Örnek olarak, Mor için ön kamera gerektiğini varsayalım. Aslına bakarsanız, Purple’ın amacı, ön kamerayla eğlenceli şeyler kullanın! Ancak API 11 ve üstü cihazların hepsinin Hatta ön kamera da VAR! Korkunç bir durum.

Neyse ki bir kullanıcı bu tür bir cihazdan Google Play'e göz atıyorsa Google Play gerekiyorsa Purple'ın ön kameranın gerekli olduğunu belirttiğini ve sessiz bir şekilde , Mor ile bu cihazın son derece uyumlu olmadığını belirledi. Bu durumda Artık Red'in hem büyük cihazlarla uyumlu olduğunu hem de ön kamera bulunuyor. Uygulama, kullanıcı tarafından Google Play'den indirilmeye devam edebilir. Ön kameradaki tüm bu talihsizliklere rağmen hâlâ bu özel anketi destekleyen bir APK vardı, API düzeyi.

Tüm APK'larınızı ayrı "kanallarda" tutmak için iyi bir sürüm kodu şemasına sahip olmanız önemlidir. Önerilen kod, tarayıcının Sürüm Kodları alanında geliştirici kılavuzumuza göz atın. Bölümün tamamını okumak faydalı olabilir, ancak temel olarak, bu setin temel APK'larda minSDK'yı, iki min/maks. ekran boyutunu temsil eder ve 3'ün ise kodunu girin. Bu şekilde, cihaz yeni bir Android sürümüne geçtiğinde, (örneğin, 10'dan 11'e), şu anda uygun olan ve şu anda yüklü olana tercih edilen APK'lar tarafından "yükseltme" olarak algılanır. Örneğe uygulandığında sürüm numarası şeması aşağıdaki gibi görünebilir:

Mavi: 0304001, 0304002, 0304003...
Yeşil: 0334001, 0334002, 0334003
Kırmızı: 0344001, 0344002, 0344003...
Mor: 1104001, 1104002, 1104003...

Hepsini bir araya getirdiğimizde, Android Manifest'leriniz muhtemelen takip etmek için:

Mavi:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="0304001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    <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="0334001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    <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="0344001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

Mor:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1104001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="11" />
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Teknik olarak birden fazla APK'nın destek ekranlarıyla veya uyumlu ekranlar etiketini kullanın. Destek ekranlı ekranlar genellikle tercih edilir ve bu genelde Gereksiz karmaşık hale getirir ve hata olasılığını artırır. Ayrıca, varsayılan değerlerden yararlanmak yerine (küçük ve normal), varsayılan değerlerin her zaman varsayılan olarak) manifest dosyaları, her ekran boyutunun değerini açıkça belirler. Bu, sorunları çözebilir. Örneğin, hedef SDK'sı < 9'un boyutu xlarge olacaktır boyut henüz mevcut olmadığı için otomatik olarak false (yanlış) değerine ayarlanır. Bu nedenle açık olun.

Lansman öncesi yapılacaklar listenizi inceleme

Google Play'e yüklemeden önce aşağıdaki öğeleri bir kez daha kontrol edin. Bunların birden fazla APK ile ilgilidir ve hiçbir şekilde tüm APK'lar için Google Play'e yüklenen uygulamalar.

  • Tüm APK'ların paket adı aynı olmalıdır.
  • Tüm APK'lar aynı sertifikayla imzalanmalıdır.
  • APK'lar platform sürümünde çakışıyorsa minSdkVersion değeri daha yüksek olan APK'nın daha yüksek sürüm kodu.
  • APK'nızın desteklemesini istediğiniz her ekran boyutu, manifest dosyasında "true" (doğru) değerine ayarlanmalıdır. Her ekran boyutu değerini false (yanlış) değerine ayarlayın.
  • Manifest filtrelerinizde çakışan bilgiler (yalnızca XLARGE ekranlarındaki cupcake'i kimse göremez)
  • Her APK'nın manifest dosyası, desteklenen ekran, OpenGL dokusu veya platform sürümü gereklidir.
  • Her APK'yı en az bir cihazda test etmeyi deneyin. Bunun dışında, sahip olduğunuz özelleştirilebilir cihaz emülatörlerini kullanabilirsiniz. Kahretsin!

Piyasaya sunmadan önce derlenmiş APK'yı incelemeniz önerilir. uygulamanızı Google Play'de gizleyebilecek sürprizler olabilir. Bu işlem aslında "aapt" aracını kullanın. Aapt (Android Öğe Paketleme Aracı), öğe oluşturma ve izleme özellikleri bir araç paketidir. Ayrıca, uygulamaları 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 çıkışını incelerken, ekranları ve uyumlu ekranları desteklemesi ve istenmeyen "uses-feature" özelliğinin olmaması gerekir. değerler otomatik olarak eklenir. Yukarıdaki örnekte APK, bu durum tüm cihazlarda olmasa da çoğu cihaz tarafından görülmez.

Neden? Gerekli SEND_SMS izninin eklenmesiyle, android.hardware.telephony özellik gereksinimi dolaylı olarak eklenmişti. Büyük boyutlu cihazların çoğu (hepsi olmasa da) telefon donanımı bulunmayan tabletler olduğundan, Google Play bu durumlarda bu APK'yı filtreler.

Neyse ki bu sorun, aşağıdakileri manifest dosyanıza ekleyerek kolayca düzeltilebilir:

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

android.hardware.touchscreen şartı 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, ancak göründüğünde son bir kontrol yapın. Uygulamayı, APK'ların istenen cihazları hedeflediğinden emin olmak için ihtiyaç duyabileceğiniz tüm test cihazlarına indirin. Tebrikler, işlemi tamamladınız.