Farklı API düzeyleri 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 birbirinden biraz farklı API düzeyleri aralığını kapsar. Ayrıca bazı araçlar sayesinde Birden fazla APK kod tabanının bakımını mümkün olduğunca sorunsuz hale getirmek için gereklidir.

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

Android'in farklı neslinde çalışacak bir uygulama oluşturmaya çalışırken uygulamanızın yeni cihazlarda yeni özelliklerden yararlanmasını, geri dönük uyumluluktan ödün vermeden. Başlangıçta birden fazla APK gibi görünebilir desteği en iyi çözümdür, ancak bu çoğu zaman mümkün 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 öğrendiğiniz konular: tek bir APK'da yalnızca belirli API düzeylerinde çalışan, ve hesaplama açısından pahalı teknikler (ör. bu makaleyi inceleyin.

Uygulamanızı yönetebilirseniz, uygulamanızı tek bir APK ile sınırlamanız, birkaç aşağıdakiler de dahil olmak üzere bazı avantajlar:

  • 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 API'nin gerektiğini hızlıca belirlemek için basit bir grafik oluşturarak başlayın aralığı belirtin. Referans olması açısından Platform Sürümleri Android Developers web sitesi, belirli bir sürümü çalıştıran etkin cihazların göreceli sayısıyla ilgili veri sağlar sürümü kullanılıyor. Ayrıca, başta kolay gibi gelse de, hangi setin size ait olduğunu her APK'nın hedefleyeceği API düzeyinin yüzdesi, özellikle de doğru ve tam bir (sıklıkla vardır). Neyse ki gereksinimlerinizi hızla ve kolayca ve daha sonrası için kolayca başvurabileceğiniz bir alandır.

Birden fazla APK grafiğinizi oluşturmak için öncelikle Android platformunun çeşitli API düzeylerine sahip olması gerekir. Sonuna, geleceği temsil etmesi için fazladan bir hücre ekle Android'in sürümleri.

3 4 5 6 7 8 9 10 11 12 13 +

Şimdi grafikte her renk bir APK'yı temsil edecek şekilde renklendirme yapın. Yaşanabilecek uyuşmazlıklara her APK'yı belirli bir API düzeyi aralığına uygulayabilirsiniz.

3 4 5 6 7 8 9 10 11 12 13 +

Bu grafiği oluşturduktan sonra ekibinize dağıtın. Projenizde ekip iletişimi "3-6 API düzeylerine ilişkin APK nasıl?" diye sormak yerine, olduğunu öğrendim. Nasıl gidiyor?" "Mavi APK nasıl geliyor?" diyebilirsiniz birlikte mi?"

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 ele alalım ve APK'ların herhangi biri için maksimum API düzeyi ayarlayabilirsiniz. Ayrı ayrı ele alındığında, her bir APK'nın olası aralığı aşağıdaki gibi görünür:

3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +

Çünkü daha yüksek minSdkVersion değerine sahip bir APK'nın da varsa, versionCode değerleri bakımından, kırmızı ≥ yeşil ≥ mavi. Bu nedenle, grafiği şu şekilde daraltabiliriz:

3 4 5 6 7 8 9 10 11 12 13 +

Şimdi de Red APK'nın, diğer ikisinde olmayan bazı gereksinimleri olduğunu varsayalım. Filter on Google Play (Google Play'deki filtreler) Nedenlerin tam listesi Android Geliştirici kılavuzunda verilmiştir. Örneğin, kırmızı için bir ön kamera gerektiğini varsayalım. Aslına bakılırsa, proje yöneticisinin Kırmızı APK, ön kamerayı API'ye eklenen yeni ve tatlı işlevlerle birleştirmek. 11. Ancak API 11'i destekleyen bazı cihazların ön kameraları bile DEĞİL! İlgili içeriği oluşturmak için kullanılan 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 API 11'e sahip cihazlarla ileriye dönük olarak uyumlu değildir (maxSdkVersion tanımlanmadığından), ön kamera olup olmaması da önemli değil. Uygulamayı indirmeye devam edebilirsiniz ön kameradaki küçük karmaşaya rağmen söz konusu API düzeyini destekleyen APK'lar.

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, ilk birkaç basamağı minSdkVersion bilgisini vermeli ve ondan sonra artmalıdır. Bu, aşağıdaki gibi görünebilir:

Mavi: 03001, 03002, 03003, 03004...
. Yeşil: 07001, 07002, 07003, 07004...
. Kırmızı:11001, 11002, 11003, 11004...

Hepsini bir araya getirdiğimizde, Android Manifest'lerinizin görünümü aşağıdaki gibi olacaktır:

Mavi:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="03001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    ...

Yeşil:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="07001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="7" />
    ...

Kırmızı:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="11001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="11" />
    ...

Lansman öncesi yapılacaklar listenizi inceleme

Google Play'e yüklemeden önce aşağıdaki öğeleri bir kez daha kontrol edin. Bunların özellikle birden fazla APK ile ilgili olduğunu ve hiçbir şekilde Google Play'e yüklenen tüm uygulamalara ilişkin eksiksiz bir yapılacaklar listesini temsil etmediğini unutmayın.

  • 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 sürüm kodu daha yüksek olmalıdır
  • Manifest filtrelerinizi çelişen bilgilere karşı bir kez daha kontrol edin (Yalnızca XLARGE ekranlarında cupcake'i destekleyen bir APK, hiç kimse tarafından görülmez)
  • Her APK'nın manifesti, 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, şirketteki en özelleştirilebilir cihaz emülatörlerinden birine sahipsiniz. 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: 'small' 'normal' 'large' '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, pek fazla cihaz tarafından görülmez.

Neden? Gerekli SEND_SMS izni eklendiğinde, android.hardware.telephony özellik gereksinimi dolaylı olarak eklenmiştir. API 11, Honeycomb olduğundan (özel olarak tabletler için optimize edilmiş Android sürümü) ve hiçbir Honeycomb cihazının telefon donanımı olmadığından, Google Play ileride bu APK'yı her durumda filtreler. Bu cihazlar API düzeyi daha yüksek olan ve telefon donanımına sahip olana kadar ilerideki cihazlar için geçerli olur.

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. APK'ların istenen cihazları hedeflediğinden emin olmak için uygulamayı sahip olduğunuz tüm test cihazlarına indirin. Tebrikler, tamamladınız!