Farklı ekran boyutları için 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

Çeşitli Android cihaz boyutlarında çalışan bir uygulama oluşturmaya çalışırken doğal olarak uygulamanızın, daha büyük cihazlardaki mevcut alanın tamamından yararlanmasını istersiniz. özelliklerimizden ödün vermeden daha küçük ekranlarda kullanım olanağı tanıyoruz. Daha en başta birden fazla APK'nın desteklenmesi en iyi çözüm olsa da bu durum genellikle geçerli değildir. Tek APK Kullanan Birden çok APK geliştirici kılavuzunun bölümü, destek kitaplığımızın kullanımı da dahil olmak üzere bunu tek bir APK ile gerçekleştireceğiz. Ayrıca şunu da okumalısınız: Birden fazla ekranı destekleme rehberine göz atın. Hatta kullanabileceğiniz bir destek kitaplığı parçaları Honeycomb öncesi cihazlarda kullanabilmenizi sağlayan Android SDK'sını kullanarak indirebilir. birden çok ekran desteğini tek bir APK'da çok daha kolay bir şekilde destekler).

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ı ve kolay bir şekilde daha sonra kullanmak üzere bir referans olması gerekir. Çeşitli ekran boyutlarını temsil eden bir hücre satırıyla başlayın Android platformunda mevcut.

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

Şimdi grafikte her renk bir APK'yı temsil edecek şekilde renklendirme yapın. Yaşanabilecek uyuşmazlıklara her APK'yı belirli ekran boyutları aralığına uygulayabilir.

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

İhtiyaçlarınıza bağlı olarak, "küçük ve diğer her şey" adlı iki APK'nız da olabilir veya "xlarge ve geri dönüp bakarsınız". Grafikteki boyamalar ekip içi iletişimi de kolaylaştırır. Bir projeyi kaç farklı ekran türü olursa olsun, artık her APK'ya "mavi", "yeşil" veya "kırmızı" ele alacağız.

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-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 "hedefinden" büyük tüm ekran boyutlarını destekleyecek şekilde ayarlanmıştır ekran boyutu. Ayrı ayrı ele alındığında her APK'nın olası aralığı aşağıdaki gibi 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"ı kullanarak Örneğin, versionCode özelliğini her APK'yı kırmızı ≥ yeşil ≥ maviye ayarladıysanız grafik aşağıdaki şekilde daralır:

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

Şimdi de Red APK'nın, diğer ikisinde olmayan bazı gereksinimleri olduğunu varsayalım. İlgili içeriği oluşturmak için kullanılan Android'in Google Play'deki filtreler sayfasında Olası nedenlerin tam listesi geliştirici kılavuzunda bulunmaktadır. Örnek olarak bir reklamverenin, Kırmızı için ön kamera gerekir. Aslında kırmızı APK'nın amacı, içerdiği ekstra o ön kamerayla eğlenceli şeyler yapmak için kullanabileceğiniz kullanılabilir bir alan olduğunu unutmayın. Ama görünüşe göre her büyük cihazın ön kamerası bile YER ALMAZ! Korku!

Neyse ki bir kullanıcı bu tür bir cihazdan Google Play'e göz atıyorsa Google Play Kırmızı'nın gereklilik olarak ön kamerayı listelediğini görür ve bunu sessizce yok sayar, Kırmızı ile bu cihazın dijital cennette bir eşleşme olmadığını belirledi. Bunu yaptığınızda, Yeşil, yalnızca büyük cihazlarla uyumlu değildir, aynı zamanda büyük boyutlu ön kamera! Kullanıcı, uygulamayı Google Play'den indirmeye devam edebilir. Bunun nedeni Ön kameradaki tüm yanlış karışıklığa rağmen hâlâ bu ekranı destekleyen bir APK vardı. seçin.

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. Örnek APK grubu olası 3 APK'dan yalnızca biriyle ilgili olduğundan her APK'yı 1000 ile ayırmak ve oradan itibaren artırmak yeterli olacaktır. 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...

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="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 destek ekranlarından herhangi biriyle çalışacağını unutmayın etiketini veya uyumlu ekranlar etiketini kullanabilirsiniz. Destek ekranları genellikle tercih edilir. ve her iki etiketi de aynı manifestte kullanmak genellikle çok kötü bir fikirdir. Google işleri gereksiz ölçüde karmaşık hale getirir ve hata olasılığını artırır. Ayrıca, varsayılan değerlerden (küçük ve hassas) normal ifadesi varsayılan olarak her zaman doğrudur), manifest dosyalarında her ekran boyutunu kontrol edin. Bu yöntem, ileride karşılaşacağınız baş ağrısından tasarruf etmenizi sağlayabilir. Örneğin, hedef SDK: < 9 için xlarge değeri otomatik olarak false (yanlış) değerine ayarlanır, çünkü bu boyut henüz var değildir. 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'nızın desteklemesini istediğiniz her ekran boyutu, manifest dosyasında "true" (doğru) değerine ayarlanmalıdır. Her ekran boyutu 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 platformlardan en az birinde benzersiz olmalıdır. platform sürümü
  • 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 manifesto:

<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ördüğünde son bir kontrol yapın. Uygulamayı, emin olmanız gerekebilecek tüm test cihazlarına indirin. olduğundan emin olun.

Google Play'de birden fazla APK yayınlama hakkında daha fazla bilgi için şu makaleyi okuyun: Birden fazla APK desteği.