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.

Google Play'de birden fazla APK'dan yararlanmak için Android uygulamanızı geliştirirken, en başından itibaren bazı iyi uygulamaları benimsemek ve gereksiz sıkıntıları önlemek önemlidir ilerlemeye devam etmesini sağlar. Bu derste, APK'nızın birden fazla APK'sını nasıl her biri farklı bir ekran boyutu sınıfını kapsayan uygulamalar. 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 onaylayın

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. Bu durumda şunları yapabilirsiniz: Yeni Android API'yi kullanmak için büyük ekranların alanından yararlanmak ve küçük ekranlarda çalışmaya devam etmek özellikleri veya görsel dokuları kullanır. 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
  • Farklı cihazlarda uygulama geri yükleme özelliği sorunsuz bir şekilde çalışır
  • 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 içeren bir örnek gösterilmektedir. 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. Bunu yazdır ve kod tabanınızda çalışan herkese teslim edebilirsiniz. Hayat çok daha kolaylaştı.

Tüm ortak kod ve kaynakları 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: Oluşturma ve bu dersin kapsamı dışında kalan projeler için Gantt şeması isimli Android Kitaplığı Oluşturma bölümünü okuyabilirsiniz.

Mevcut bir uygulamayı birden fazla APK desteğini kullanacak şekilde dönüştürüyorsanız her yerelleştirilmiş dize dosyası, değer listesi, tema için kod tabanınızı APK'larda değişmeyecek olan renkler, menü simgeleri ve hepsini kitaplık projesinde kullanıyor olabilir. Ç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, bu etkinlikte 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ında en yüksek sürüm numarası 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:

  • SDK 3 dahil olmak üzere tüm ekranları mavi renkle kaplar.
  • 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. Örneğin, Purple için bir ö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! Korku!

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 koduna sahip olmak önemlidir. şema. Ö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 izni eklendiğinde, android.hardware.telephony özellik gereksinimi dolaylı olarak eklenmiştir. 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 manifest dosyanıza aşağıdakileri ekleyerek bu sorunu kolayca düzeltebilirsiniz:

<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 cihazlar olan 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, tamamladınız!