Farklı GL dokuları 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, bazı iyi uygulamaları en başından itibaren benimsemek ve gereksiz sıkıntıları daha fazla önlemek önemlidir. sürecine dahil edersiniz. Bu derste, uygulamanız için birden fazla APK oluşturmayı, her biri farklı bir OpenGL doku biçimi alt kümesini destekler. 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 tüm Android destekli cihazlarda çalışacak bir uygulama oluşturmaya çalışırken kullanıyorsanız, doğal olarak uygulamanızın her cihazda en iyi görünmesini istersiniz. ancak hepsi aynı GL dokularını desteklemiyor. Başlangıçta sanki birden fazla APK'nın desteklenmesi en iyi çözümdür ancak bu durum çoğu zaman geçerli değildir. Tek APK Kullanan Birden çok APK geliştirici kılavuzunun bölümü, desteklenen doku nasıl algılanacağı da dahil olmak üzere) tek bir APK ile bunu gerçekleştirebilir biçimleriyle birlikte çalışır. Durumunuza bağlı olarak, tüm biçimleri aynı reklam grubuna sunmak daha kolay olabilir. seçin ve çalışma zamanında hangisinin kullanılacağını seçin.

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

Android Geliştirici Kılavuzu, Google Play Yardım Merkezi'nde desteklenen bazı dokularla ilgili supports-gl-texture öğrenin. Bu sayfa, hangi telefonların (veya telefon ailelerinin) desteklediğiyle ilgili bazı ipuçları da içerir doku biçimlerini kullanabilirsiniz. APK'larınızdan birinin desteklemesi genellikle iyi bir fikir ETC1, bu doku biçimi OpenGL ES'yi destekleyen tüm Android destekli cihazlar tarafından desteklendiği için 2.0 teknik özellikleri

Android destekli çoğu cihaz birden fazla doku biçimini desteklediğinden sağlar. Uygulamanızın kullanacağı tüm biçimleri içeren bir grafik oluşturun destek. En soldaki hücre en düşük öncelikli olacaktır (muhtemelen ETC1, (performans ve uyumluluk açısından kesin bir varsayılan) sunmaz. Ardından grafikte, her bir öğenin hücresi bir APK'yı temsil eder.

HGS1 ATI PowerVR

Grafikte renklendirme, bu kılavuzu daha az tek renkli hale getirmekten daha fazlasını yapar. Aynı zamanda, ekip içi iletişimi kolaylaştırmaktadır. Artık her APK'ya "mavi", "yeşil" veya "ETC1 doku biçimlerini destekleyen" yerine "kırmızı" vb.

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, bazı basit kurallar 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
  • APK'nızda listelenen doku biçimlerinden herhangi biri pazardaki cihaz tarafından destekleniyorsa bu cihaz uygun kabul edilir

GL Dokuları için bu son kural önemlidir. Yani, ekip için aynı uygulamada farklı GL biçimleri kullanma konusunda çok dikkatli olun. Şu durumda: zamanların% 99'unda PowerVR'ı kullanacaktım, ancak başlangıç ekranınız için ETC1'i kullanıyorduk... Ardından manifest dosyanız her iki biçimin de desteklendiğini gösterir. Yalnızca ETC1'i destekleyen bir cihaz uyumlu kabul edilir, uygulamanız indirilir ve kullanıcı heyecan verici bir kilitlenmeyle karşılaşır. mesaj. Özel olarak hedeflemek için birden fazla APK kullanıyorsanız farklı cihazlarda görüntülenebilirse her APK için bir doku biçimi olacaktır.

Bu aslında doku desteğini diğer iki çoklu APK'dan biraz farklı hale getirir API düzeyini ve ekran boyutunu seçin. Her cihazda yalnızca bir API düzeyi ve bir ekran vardır ve bunların çeşitliliğini desteklemek APK'ya bağlıdır. Dokularla, APK genellikle bir dokuyu destekler, cihaz birçok dokuyu destekler. Çoğu zaman aynı konuda cihaz birçok APK'yı destekliyor, ancak çözüm aynı: Sürüm kodları.

Örneğin, birkaç cihaz alıp daha önce tanımlanan APK'lardan kaç tanesinin her birine uyduğuna bakın olanak tanır.

FooTelefon Nexus S Evo Dili
HGS1 HGS1 HGS1
PowerVR ATI TC

Kullanılabilir olduğunda ETC1'e kıyasla PowerVR ve ATI biçimlerinin her ikisinin de "en yüksek sürüm numarası kazanmasına" göre her APK'da versionCode özelliğini ayarlarsak ≥ mavi ≥ mavi olmalıdır. Bu durumda, renk için Mavi yerine her zaman Kırmızı ve Yeşil seçilir destekleyen cihazlar arıyoruz. Hem Kırmızı hem de Yeşil'i destekleyen bir cihaz gelirse kırmızı renk seçilir.

Tüm APK'larınızı ayrı "kanallarda" tutmak için iyi bir sürüm koduna sahip olmak şema. Önerilen kod, geliştirici kılavuzumuzun Sürüm Kodları alanında bulunabilir. Başlangıç örnek APK grubu 3 olası boyuttan yalnızca biriyle ilgiliyse yalnızca her APK'yı 1000 ile ayırın ve bu noktadan itibaren artırın. 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-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

Yeşil:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

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-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

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
  • 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ü
  • 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!