Android Geliştiricileri için APK dosyasının boyutunu küçültmek için ipuçları
Yayınlanan: 2015-10-281) ProGuard
ProGuard gibi bir kod küçültme aracı, APK dosya boyutunu önemli ölçüde azaltacaktır. Araç sourceforge'da mevcuttur. Bazen uygulama davranışını değiştirebileceğinden, ProGuard'ı uyguladıktan sonra tüm uygulamayı yeniden test etmenin çok önemli olduğunu unutmayın. ProGuard, kodun okunmasını zorlaştırmak için uygulama sembollerini değiştirdiğinden, uygulamanızdaki bir çökmeyi araştırmanız gerekiyorsa, bir yığın izini orijinal sembollere geri çevirebilmeniz için sembol eşlemesini korumanız önemlidir.
2) Hata Ayıklama bilgilerinin kaldırılması
Hata ayıklamayla ilgili tüm işlevleri uygulamadan kaldırmanızı öneririm. Uygulama genellikle bu verileri görmez veya kullanmaz ve Android işletim sistemi uygulamayı çalıştırmasını gerektirmez. Bu nedenle, hata ayıklama bilgisi yalnızca alan harcar ve kaldırılmalıdır.
Bunu başarmak için, hata ayıklamayla ilgili tüm işlevler, aşağıdaki gibi koşullu bloklar içine alınmalıdır:
statik son hata ayıklama = yanlış; if (hata ayıklama) { v(ETİKET, "Hata Ayıklama ...") }
Derleyicinin tüm hata ayıklama işlevlerini tamamen kaldırabilmesi için hata ayıklama bayrağının derleme zamanında ayarlanması (yani statik final olarak bildirilmesi) önemlidir. Aşağıda gösterilen gibi kendi hata ayıklama yönteminizi oluşturmak iyi bir fikir değildir, çünkü myDebugPrint() çağrısı koşullu bir blokla çevrelenmez, bu da derleyicinin çağıran sınıfta myDebugPrint() hakkında bilgileri tutması gerektiği anlamına gelir.
genel geçersiz myDebugPrint() if (hata ayıklama) v(TAG, "Hata Ayıklama ..."); } } … benimDebugPrint()
3) Yerel kitaplıklardan hata ayıklama sembollerinin kaldırılması Uygulamanız hala geliştirme aşamasındaysa ve hala hata ayıklama gerektiriyorsa, hata ayıklama simgelerini kullanmak mantıklıdır. Ancak, bir yayın derlemesini derlerken hata ayıklama sembolleri hala görünüyorsa ve bunları kaldırmak istiyorsanız, o zaman Hata Ayıklama sembollerinin yerel kitaplıklardan (.so dosyaları) kaldırılmasını öneririz. Bu, Android NDK'dan arm-eabi-strip komutu kullanılarak yapılır.
4) Önerilen medya biçimleri Uygulamanız ağırlıklı olarak görüntülere, seslere veya videolara dayanıyorsa, APK dosya boyutunu küçültmenin başka bir yolu da belirli medya biçimlerini kullanmaktır. Görüntüler, ses ve video için aşağıdaki medya biçimlerini kullanmanızı öneririz:
- Video: H264 AVC'yi kullanın. Videoyu, hedef cihazın (biliniyorsa) ekran çözünürlüğünden daha büyük olmayan bir çözünürlüğe kodlayın.
- Ses : Tüm ses kaynakları için AAC Ses önerilir. AAC, mp3 veya Ogg Vorbis'e kıyasla belirli bir kalitede daha iyi sıkıştırma sağlar. WAV gibi ham formatlar asla kullanılmamalıdır. WAV biçimini kullanmanın ortak mantığı, sıkıştırılmış ses akışlarının kodunun çözülmesinin genellikle oynatma sırasında yüksek gecikme anlamına gelmesidir. Ancak Android, uygulamaların yüksek gecikme cezası olmadan sıkıştırılmış ses akışlarını kullanmasını sağlayan Sound Pool API'sini sağlar.
- Resimler : PNG veya JPEG. PNG'leri kullanın; Kayıpsız bir format olduğu için, sıkıştırmadan kaynaklanan görsel artefakt olmayacağından dokular ve resimler için çok uygundur. Alan kısıtlamaları varsa, JPEG'leri veya PNG'lerin ve JPEG'lerin bir kombinasyonunu kullanın. Yüksek kaliteli bir JPEG görüntüsü, JPEG sıkıştırma şemasının optimize edildiği büyük fotogerçekçi görüntüler için iyi çalışabilir.
- PNG boyutlarını kaliteden ödün vermeden optimize edin
PNG biçimini kullanırsanız, PNG görüntüleri kaliteden ödün vermeden dosya boyutunda küçültülebilir. Bunu yapmak için OptiPNG veya PNGCrush gibi bir araç kullanın. Her ikisi de görüntü kalitesini korurken PNG dosya boyutunu küçültmek için harikadır. PNGcrush, PNG filtreleri ve zlib (Söndürme) parametreleri üzerinde yinelenen, her parametre yapılandırmasını kullanarak görüntüyü art arda sıkıştıran ve en küçük sıkıştırılmış (IDAT) çıktıyı veren yapılandırmayı seçen açık kaynaklı bir programdır. Öte yandan, OptiPNG, denemeleri tamamen bellekte gerçekleştirir ve yalnızca son çıktı dosyasını diske yazar. Ayrıca, kullanıcıya birden çok optimizasyon ön ayarı sunar.
5) Kullanılmayan kaynakları kaldırın APK dosyanızdan kaldırmak için göz önünde bulundurmanız gereken bir diğer potansiyel alan israfı grubu, res dizininizdeki kullanılmayan düzenler, çizilebilir öğeler ve renkler gibi kullanılmayan kaynaklardır. APK'nızda kaldırılabilecek kullanılmayan kaynakları tespit etmek için android-unused-resources aracını kullanın. Android Unused Resources, projenizi kullanılmayan kaynaklar için tarayan bir Java uygulamasıdır.
6) Yinelemeden kaçının Uygulamanızın yinelenen işlevlere veya yinelenen varlıklara sahip olmadığından emin olmak, APK'nızda gereksiz dosyalar bulundurmaktan kaçınmanın açık bir yoludur. Hangi Android API'lerini kullandığınızı ve her birinin sağladığı tam işlevselliği anlamak önemlidir. Bir Android API zaten başka bir API'nin işini yapıyor olabilir. Yinelenen varlıklar (dizeler, bitmapler vb.) de alan israfıdır ve kolayca önlenebilir. Daha az bir ölçüde, yinelenen kod, teslim edilen ikili dosyanın boyutunu gereksiz yere artıracaktır.
7) Yöntem sayınızı azaltın Avid Android geliştiricileri, uygulamalarında baş ağrısına neden olan bir sorunla uzun zamandır karşı karşıya kaldılar. Bir uygulamanın sahip olabileceği yöntem sayısı sınırlıdır. Eh, eskiden sınırlıydı. Sonunda, Google'daki iyi insanlar geçen Ekim ayında bir çözüm sağladı, ancak bu ideal olmaktan uzaktı. Uygulaması çok kolay olmasına rağmen, multidex çözümü karmaşık hale getirdi ve derleme süresini önemli ölçüde uzattı. Lollipop'tan (Android 5.0) başlayarak hareketsiz kalmayan tüm Android Sanal Makinesi, çok daha dayanıklı bir çözüm sunmak için devrim yarattı, hatta normal derleme süresini iyileştiren türden. Ancak şu an için Lollipop çözümü de ideal değil. Geliştiricilerin yalnızca Lollipop'a karşı geliştirmelerini gerektirir; bu, çoğu uygulama daha geniş kitlelerle uyumlu olmak istediğinden ve önceki Android sürümlerinde bulunmayan özellikleri kullanmaktan korkabileceğinden sorunlu olabilir. Dolayısıyla, şu anda Lollipop çözümü iyi bir gelecek Android çözümüdür, ancak öngörülebilir günümüzde fazla bir etkisi olmayabilir. Peki bu arada ne yapılabilir? 65K sınırına ulaşmaktan kaçınmak için özelliklerden ve yeteneklerden vazgeçmemeniz gerektiği konusunda hepimiz hemfikiriz. Ancak en iyi uygulamanın yine de uygulama yöntemi sayınızı azaltmak olduğuna şüphe yoktur. Peki, uygulamanızı özel kılan o küçük kıvılcımı kaybetmeden yöntem sayınızı nasıl azaltmaya çalışabilirsiniz?
Kısa Bir Bakış: “Bütün bu yöntemler nereden geliyor?”
Yöntem sayım sınırı kabaca 65K yöntemlerde (tam olarak 65.536) duruyor. Kulağa çok büyük bir sayı gibi geliyor. Acemi bir Android geliştiricisiyseniz, “bu kadar çok uygulama bu sayıya nasıl bu kadar çabuk ulaşabilir?” diye düşünüyor olabilirsiniz. Muhtemelen biraz haklısın. Bu kadar çok yöntemi tek başınıza yazmak kolay değil. Ancak uygulama geliştiricileri, tüm uygulamalarını kendi başlarına yazmazlar. Uygulama geliştiricileri, aksi takdirde tamamen kendi başlarına geliştirmek zorunda kalacakları belirli hedeflere ve özelliklere ulaşmalarına yardımcı olan daha fazla üçüncü taraf kitaplığı (SDK'lar - Yazılım Geliştirme Kitleri) kullanıyor. Reklamlardan GUI geliştirmelerine, sosyal ağlara, kilitlenme raporlamasına ve çok daha fazlasına kadar SDK'lar, değerli geliştirme süresinden tasarruf sağlayan ve uygulamanızın daha hızlı kullanıma sunulmasına yardımcı olan çok çeşitli yetenekler ve API'ler sunar. Ancak her bir SDK, yöntem sayınızı artırır ve bazı SDK'lar, pazarlık ettiğinizden daha fazlasını bile yapar. Bu mutlaka kötü bir şey değil elbette. Ancak, darbe de Google'ın kendisinden geldi. Google Play Hizmetleri kitleri, 28.000'den fazla yöntem içeren büyük bir SDK'dır. 65K limiti ile bu sayı tam olarak düşük değil. Ve birçok uygulama geliştiricisi, bu SDK'yı kullanmak istiyor, çünkü bu, kişinin uygulamasına bol miktarda değer katan, çok arzu edilen bir yetenek olan büyülü Google krallığının kapısını açıyor. Bu gönderide, yalnızca Google Play Hizmetleri paketlerini seçmeli olarak nasıl kullanacağınızı açıklamayacağım, aynı zamanda bu paketlerin her birinin uygulamanıza kaç yöntem eklediğini de anlatacağım. O yüzden koltuklarınıza tutunun, inişli çıkışlı bir yolculuk olacak.
Google Play Hizmetleri Oyun Alanı
Peki Google Play Hizmetleri aslında kaç tane yöntem ekliyor? Pekala, hayattaki her şeyde olduğu gibi, bu sadece bir alt satır sayısından çok daha karmaşık. Ama her seferinde bir adım atalım. Google Play Hizmetleri SDK'sı aslında 19 farklı SDK içerir. Gradle ile hangilerini kullanacağınızı seçerek seçebilirsiniz. Tek yapmanız gereken, uygulama modülünüzün build.gradle dosyasına aşağıdaki bağımlılığı eklemektir:
bağımlılıklar { 'com.google.android.gms:play-services:7.5.0' derleyin }
7.5.0, şu anda yayınlanan en son GPS sürümüdür. Android SDK Yöneticisi içinde revizyon 25 olarak etiketlenmiştir. Belirli paketleri seçmek için, belirli paketleri belirterek, aşağıdaki satırı istediğiniz kadar bağımlılık satırıyla değiştirin. Örneğin, Google Plus, Google Games, Google Ads ve Google Maps istediğinizi söyleyin:
bağımlılıklar { 'com.google.android.gms:play-services-plus:7.5.0' derleyin 'com.google.android.gms:play-services-games:7.5.0' derleyin 'com.google.android.gms:play-services-ads:7.5.0' derleyin 'com.google.android.gms:play-services-maps:7.5.0' derleyin }
Çok zor değil, ama işte ilk yakalama. Şanlı 19 SDK'dan birine play-services-base denir. Herhangi bir Google Play Hizmet paketi eklerseniz, o da otomatik olarak eklenecektir. Temel paket kaç yöntem içeriyor? Yaklaşık 8.000 (tam sayı aşağıda).
Ve işte ikinci yakalama. Yukarıdaki örnekte sadece 3 paket eklemedim. Temel paketi de sayarsanız, sadece 4'ü dahil etmedim. Aslında 5 paket ekledim. Neden? Niye? Google Games paketi, Google Drive paketini kullandığından ve dolayısıyla o da içe aktarıldığından (gerçekte Google Ads, etiket yöneticisi adında bir paket de içerir, ancak burada yalnızca “seçilebilir” paketleri sayıyorum).
Şimdi, Google Play Hizmetlerinin her paketinin uygulamamıza eklediği yöntemleri saymanın neden biraz daha zor olduğunu anlamaya başlıyoruz. Bir paketi dahil etmek, mutlaka diğerlerini hariç tutmak anlamına gelmez.
İşte aşağı yukarı - hangi paketleri ekleyebileceğiniz, kaç tane yöntem ekledikleri ve partiyi çökertmek için başka hangi paketleri getirdikleri. Veriler, Google Play Hizmetlerinin (7.5.0 / revizyon 25) en son sürümüne ilişkindir:
Toplam yöntem sayısı: 28,175. Kabul etmelisiniz ki bu sayılardan bazıları gerçekten iğrenç. Tek istediğiniz panorama paketiyse, sadece dokuz yöntem elde edemezsiniz, neredeyse 8.000 almanız gerekir. Pek çok uygulamanın bu 65K sınırına yaklaşması veya aşması şaşırtıcı değil.
Bunları toplamaya çalışırsanız, bu rakamlardan bazıları biraz tutarsız görünebilir. Bunun nedeni, Google Play Hizmetlerinin arkasındaki mantığın göründüğünden biraz daha aldatıcı olmasıdır. Örneğin, Google Analytics, hesabın Reklam Kimliğini almak için Google Ads'den tek bir yöntem içerir.
Her paketin uygulamanıza ne kadar eklediğini hesaplarken, çiftleri hariç tuttuğunuzdan emin olun (örneğin, temel paketi bir kereden fazla saymayın).
Her Şeyi Seçerek Ekleyemezsiniz
Ve işte son acı. Google Play Hizmetleri içinde seçilerek eklenemeyen iki küçük paket vardır. Arama paketi (Google Asistan API'sine erişmenizi sağlar) yalnızca 22 yöntem içerir. Kullanmak istiyorsanız, 28.000'den fazla yöntemin tamamını, tüm Google Play Hizmetlerini eklemekten başka seçeneğiniz yok. Umarım, bu sonraki sürümlerde düzeltilecektir.
(Bir başka "erişilemeyen" paket, 111 yöntem içeren appstate paketidir, ancak artık google-play-games paketinde bulunan SavedGames lehine kullanımdan kaldırılmıştır).