Uygulamanızı Google Play'de yayınlarsanız bir Android App Bundle oluşturmanız ve yüklemeniz gerekir. Bunu yaptığınızda Google Play her kullanıcının cihaz yapılandırması için optimize edilmiş APK'ları otomatik olarak oluşturur ve sunar. Böylece kullanıcılar yalnızca uygulamanızı çalıştırmak için ihtiyaç duydukları kod ve kaynakları indirir. Google Play'de yayınlama yapmıyorsanız, ancak her APK'yı kendiniz oluşturmanız, imzalamanız ve yönetmeniz gerekiyorsa birden fazla APK yayınlamak yararlıdır.
Google Play'deki birden fazla APK'dan yararlanmak için Android uygulamanızı geliştirirken, en başından itibaren bazı iyi uygulamaları benimsemeniz ve geliştirme sürecinde gereksiz sıkıntıları önlemeniz önemlidir. Bu derste, her biri farklı bir OpenGL doku biçimi alt kümesini destekleyen uygulamanızın birden fazla APK'sını nasıl oluşturacağınız gösterilmektedir. Ayrıca, birden fazla APK kod tabanını mümkün olduğunca sorunsuz bir şekilde yönetmek için gerekli bazı araçlara da sahip olursunuz.
Birden fazla APK'ya ihtiyacınız olduğunu onaylama
Mevcut tüm Android cihazlarda çalışacak bir uygulama oluştururken, uygulamanızın her cihazda en iyi şekilde görünmesini istersiniz. Ancak tüm cihazlar aynı GL doku grubunu desteklemez. İlk başta birden fazla APK desteğinin en iyi çözüm olduğu düşünülebilir ancak bu genellikle doğru değildir. Birden çok APK geliştirici kılavuzunun Tek APK Yerine Tek APK Kullanma bölümü, çalışma zamanında desteklenen doku biçimlerini algılama da dahil olmak üzere bunu tek bir APK ile nasıl gerçekleştireceğinizle ilgili bazı yararlı bilgiler içerir. Durumunuza bağlı olarak, tüm biçimleri uygulamanızla birlikte paketlemek ve çalışma zamanında kullanılacak olanı seçmek daha kolay olabilir.
Bunu yönetebilirseniz, uygulamanızı tek bir APK ile sınırlandırmanın aşağıdakiler gibi bazı avantajları vardır:
- Yayınlama ve test etme daha kolaydır
- Yalnızca bir kod tabanı vardır.
- Uygulamanız, cihaz yapılandırması değişikliklerine uyum sağlayabilir
- Cihazlar arasında uygulama geri yükleme işlemi sorunsuz çalışır
- Pazar tercihi, bir APK'dan diğerine "yükseltme" davranışı veya hangi APK'nın hangi cihaz sınıfıyla uyumlu olduğu konusunda endişelenmenize gerek yoktur.
Bu dersin geri kalanında; konuyu araştırdığınız, malzemeyi bağlantılı kaynaklardan titizlikle özlediğiniz ve birden fazla APK'nın uygulamanız için doğru yol olduğunu belirlediğiniz varsayılır.
İhtiyaçlarınıza göre grafik oluşturma
Android Geliştirici Kılavuzu'nda, supports-gl-texture sayfasında yaygın olarak kullanılan bazı desteklenen dokularla ilgili faydalı bir referans yer almaktadır. Bu sayfada, hangi telefonların (veya telefon ailelerinin) belirli doku biçimlerini desteklediğine dair bazı ipuçları da yer alır. Bu doku biçimi, OpenGL ES 2.0 spesifikasyonunu destekleyen tüm Android cihazlar tarafından desteklendiğinden, APK'larınızdan birinin ETC1'i desteklemesi genellikle iyi bir fikirdir.
Android destekli çoğu cihaz birden fazla doku biçimini desteklediğinden bir tercih sırası belirlemeniz gerekir. Uygulamanızın destekleyeceği tüm biçimleri içeren bir grafik oluşturun. En soldaki hücre en düşük önceliğe sahip olur (muhtemelen ETC1 olur. Performans ve uyumluluk açısından gerçekten sağlam bir varsayılan değerdir). Ardından, grafikte her hücrenin bir APK'yı gösterecek şekilde renklendirmesi gerekir.
HGS1 | ATI | PowerVR |
Grafikte renklendirme yapmak, bu kılavuzu daha az tek renkli hale getirmekten çok daha fazlasını yapar. Ekip içi iletişimi de kolaylaştırır. Artık her APK'yı "ETC1 doku biçimlerini destekleyen APK" gibi ifadeler yerine "mavi", "yeşil" veya "kırmızı" olarak adlandırabilirsiniz.
Ortak kod ve kaynakların tümünü bir kitaplık projesine yerleştirme
İster mevcut bir Android uygulamasında değişiklik yapın ister sıfırdan bir uygulamaya başlayın, kod tabanında yapmanız gereken ilk ve en önemli şey budur. Kitaplık projesine eklenen her şeyin yalnızca bir kez güncellenmesi gerekir (dil yerelleştirilmiş dizeler, renk temaları, paylaşılan kodda düzeltilen hatalar gibi). Bu, geliştirme sürenizi kısaltır ve kolayca önlenebilen hata olasılığını azaltı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 kodların da kütüphane projesinde yer alması gerekiyor. APK'dan APK'ya bir veya iki yöntem eklemek için bu sınıfları genişletmeniz gerekebilir.
Öte yandan, uygulamayı sıfırdan oluşturuyorsanız önce kitaplık projesine mümkün olduğunca kod yazmaya çalışın. Ardından, kodu yalnızca gerekirse tek bir APK'ya taşıyın. Bu, uzun vadede bir klasöre, sonra başka bir klasöre, sonra başka bir klasöre eklemekten ve aylarca sonra bu blob'un herhangi bir şeyi bozmadan kitaplık bölümüne taşınıp taşınamayacağını anlamaya çalışmaktan çok daha kolaydır.
Yeni APK projeleri oluşturma
Yayınlayacağınız her APK için ayrı bir Android projesi olmalıdır. Kolay düzenleme için kitaplık projesini ve ilgili tüm APK projelerini aynı üst klasörün altına yerleştirin. Ayrıca her APK'nın aynı paket adına sahip olması gerektiğini unutmayın. Ancak, her APK'nın paket adını kitaplıkla paylaşması gerekmez. Daha önce açıklanan şemayı uygulayan 3 APK'nız olsaydı kök dizininiz aşağıdaki gibi görünebilirdi:
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. Mümkünse başlangıç etkinliğinizi kitaplık projesinde tanımlayın ve APK projenizde bu etkinliği genişletin. Kitaplık projesinde tanımlanmış bir başlangıç etkinliği olması, uygulamanızın tüm ilklendirme işlemlerini tek bir yere yerleştirmenize olanak tanır. Böylece, her APK'nın Analytics'i başlatma, lisanslama kontrolleri yapma ve APK'lar arasında çok fazla değişiklik göstermeyen diğer ilklendirme işlemlerini yeniden uygulamak zorunda kalmaz.
Manifestleri ayarlama
Kullanıcı Google Play üzerinden birden fazla APK kullanan bir uygulama indirdiğinde, kullanılacak doğru APK bazı basit kurallar kullanılarak seçilir:
- Manifest'te, söz konusu APK'nın uygun olduğu belirtilmelidir.
- Uygun APK'lar arasında en yüksek sürüm numarası kazanır
- APK'nızda listelenen doku biçimlerinden herhangisi piyasadaki cihaz tarafından destekliyorsa bu cihaz uygun kabul edilir.
GL dokuları söz konusu olduğunda son kural önemlidir. Örneğin, aynı uygulamada farklı GL biçimleri kullanma konusunda çok dikkatli olmanız gerekir. Zamanın% 99'unda PowerVR'yi kullanıyorsanız ancak örneğin açılış ekranınız için ETC1 kullanıyorsanız... Bu durumda manifestiniz her iki biçim için de destek belirtmelidir. Yalnızca ETC1'i destekleyen bir cihaz uyumlu olarak kabul edilir, uygulamanız indirilir ve kullanıcı heyecan verici kilitlenme mesajları görür. Genel durum, GL doku desteğine göre farklı cihazları hedeflemek için özel olarak birden fazla APK kullanıyorsanız bunun her APK için bir doku biçimi olması olacaktır.
Bu durum, doku desteğini diğer iki birden fazla APK boyutundan (API düzeyi ve ekran boyutu) biraz farklı kılar. Her cihazın yalnızca bir API düzeyi ve bir ekran boyutu vardır. Bu özelliklerin bir kısmını desteklemek APK'ya bağlıdır. APK genellikle bir doku destekler, cihaz ise birçok doku destekler. Bir cihazın birden fazla APK'yı desteklemesi sık karşılaşılan bir durumdur ancak çözüm aynıdır: Sürüm kodları.
Örneğin, birkaç cihaz alın ve daha önce tanımlanan APK'lardan kaç tanesinin her cihaza uyduğunu görün.
FooPhone | Nexus S | Evo |
HGS1 | ETC1 | HGS1 |
PowerVR | ATI TC |
Mevcut olduğunda PowerVR ve ATI biçimlerinin ETC1'e tercih edildiği varsayıldığında, "en yüksek sürüm numarası kazanır" kuralına göre, her APK'da versionCode özelliğini kırmızı ≥ yeşil ≥ mavi olacak şekilde ayarlarsak hem kırmızı hem de yeşil, bunları destekleyen cihazlarda her zaman mavi yerine seçilir. Hem kırmızı hem de yeşili destekleyen bir cihaz ortaya çıkarsa kırmızı seçilir.
Tüm APK'larınızı ayrı "kanallarda" tutmak için iyi bir sürüm kodu şemasına sahip olmanız önemlidir. Önerilen sürümü, geliştirici kılavuzumuzun Sürüm Kodları bölümünde bulabilirsiniz. Örnek APK grubu yalnızca 3 olası boyuttan biriyle ilgilendiğinden, her APK'yı 1.000'e ayırıp buradan artırmak yeterli olacaktır. Bu, şöyle görünebilir:
Mavi: 1001, 1002, 1003, 1004...
Yeşil: 2001, 2002, 2003, 2004...
Kırmızı:3001, 3002, 3003, 3004...
Tüm bunları bir araya getirdiğimizde Android manifest'leriniz muhtemelen aşağıdaki gibi görünür:
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. Bu noktaların özellikle birden fazla APK ile ilgili olduğunu ve Google Play'e yüklenen tüm uygulamalar için eksiksiz bir yapılacaklar listesi olmadığını unutmayın.
- Tüm APK'ların paket adı aynı olmalıdır
- Tüm APK'lar aynı sertifikayla imzalanmalıdır
- Çakışan bilgiler olup olmadığını görmek için manifest filtrelerinizi tekrar kontrol edin (XLARGE ekranlarda yalnızca Cupcake'i destekleyen bir APK kimse tarafından görülmez).
- Her APK'nın manifest dosyası, 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 işletmenizdeki en özelleştirilebilir cihaz emülatörlerinden birine sahipsiniz. İyi eğlenceler.
Ayrıca, uygulamanızı Google Play'de gizleyebilecek sürprizler olmadığından emin olmak için derlenmiş APK'yı pazara dağıtmadan önce incelemeniz de önerilir. Bu işlem, "aapt" aracını kullanarak oldukça basittir. Aapt (Android Öğe Paketleme Aracı), Android uygulamalarınızı oluşturup paketlemek için kullanılan derleme sürecinin bir parçasıdır ve aynı zamanda bunları incelemek için ç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 supports-screens ve compatible-screens için çakışan değerlere sahip olmadığınızdan ve manifest dosyasında ayarladığınız izinler sonucunda eklenen istenmeyen "uses-feature" değerlerine sahip olmadığınızdan emin olun. Yukarıdaki örnekte, APK tüm cihazlarda olmasa da çoğu cihazda görünmez.
Neden? Gerekli SEND_SMS izni eklendiğinde android.hardware.telephony özelliğinin koşulu dolaylı olarak eklendi. xlarge ekran boyutuna sahip cihazların çoğu (tümü olmasa da) telefon donanımına sahip olmayan tabletler olduğundan Google Play, bu tür durumlarda bu APK'yı filtreler. Gelecekte hem xlarge ekran boyutu olarak raporlanacak kadar büyük hem de telefon donanımına sahip cihazlar piyasaya çıkana kadar bu durum devam edecektir.
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 ekran 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. Uygulamanın Google Play'de gösterilmesi biraz zaman alabilir. Uygulama gösterildiğinde son bir kontrol yapın. APK'ların amaçlanan cihazları hedeflediğinden emin olmak için uygulamayı sahip olabileceğiniz tüm test cihazlarına indirin. Tebrikler, işlemi tamamladınız.