Kullanıcılar genellikle çok büyük görünen uygulamaları indirmekten kaçınır. Özellikle de gelişmekte olan pazarlarda. veya 2G ve 3G ağlara bağlanabilen ya da veri limiti olan planlar üzerinde çalışan cihazlardır. Bu sayfada aşağıdakiler açıklanmaktadır: Daha fazla kullanıcının indirebilmesi için uygulamanızın indirme boyutunu nasıl küçülteceğinizi açıklayacağız.
Uygulamanızı Android App Bundle ile yükleme
Hemen almak için uygulamanızı Android App Bundle olarak yükleyin uygulama boyutunu kaydedebilirsiniz. Android App Bundle, aşağıdakileri içeren bir yükleme biçimidir: uygulamanızın derlenmiş tüm kodlarını ve kaynaklarını kullanır, ancak APK oluşturma ve imzalama işlemlerini Google Play'e ertelersiniz.
Google Play'in uygulama sunma modeli, optimize edilmiş APK'lar oluşturmak ve sunmak için uygulama paketinizi kullanır her kullanıcının cihaz yapılandırmasına göre düzenleme yapıyor. Böylece kullanıcılar yalnızca yardımcı olabilir. Farklı cihazları desteklemek için birden fazla APK oluşturmanız, imzalamanız ve yönetmeniz gerekmez. Ayrıca kullanıcılar daha küçük ve daha optimize edilmiş indirmeler elde ediyor.
Google Play sıkıştırılmış indirme işlemini zorunlu kılar boyut kısıtlaması olan (uygulama paketleriyle yayınlanan uygulamalar için) 200 MB'tır. Daha büyük boyutlar bunları Play Feature Delivery ve Play Asset Delivery kullanarak yapabilirsiniz, ancak uygulamanızın boyutunu büyütmek yükleme başarısını olumsuz yönde etkileyebilir ve kaldırma sayısını artırabilir. Bu nedenle, bu sayfada açıklanan yönergelere bakın.
APK yapısını anlama
Uygulamanızın boyutunu küçültmeden önce bir uygulamanın APK'sının yapısını anlamanız yararlı olacaktır. APK dosyası, uygulamanızı oluşturan tüm dosyaları içeren bir ZIP arşivinden oluşur. Bu dosyaları arasında Java sınıf dosyaları, kaynak dosyaları ve derlenmiş kaynakları içeren bir dosya bulunur.
Bir APK aşağıdaki dizinleri içerir:
META-INF/
:CERT.SF
veCERT.RSA
imzasını içerir dosyalarının yanı sıraMANIFEST.MF
manifest dosyasına da erişebilirsiniz.assets/
: Uygulamanın bir öğe kullanarak alabileceği uygulama öğelerini içerirAssetManager
nesnesini tanımlayın.res/
: Şu kaynakta derlenmemiş kaynakları içerir:resources.arsc
.lib/
: Bir dosyanın yazılım katmanına özel derlenmiş kodu içerir işlemci. Bu dizinde her platform türü için bir alt dizin bulunur. Örneğin:armeabi
,armeabi-v7a
,arm64-v8a
,x86
,x86_64
vemips
.
Bir APK aşağıdaki dosyaları da içerir. Yalnızca AndroidManifest.xml
zorunludur:
resources.arsc
: Derlenmiş kaynakları içerir. Bu dosya XML içeriği barındırıyorres/values/
klasörünün tüm yapılandırmalarından. Paketleme aracı bu dosyayı XML içeriği, dosyayı ikili biçimde derler ve içeriği arşivler. Bu içerik dil içeriyor dizelerin ve stillerin yanı sıra,resources.arsc
dosyaları oluşturun.classes.dex
: tarafından anlaşılan DEX dosyası biçiminde derlenen sınıfları içerir sanal makinenizde olması gerekir.AndroidManifest.xml
: Temel Android manifest dosyasını içerir. Bu dosyada uygulamanın adı, sürümü, erişim hakları ve referans verilen kitaplık dosyaları. Dosya, Android'in ikili XML biçiminde sunulur.
Kaynak sayısını ve boyutunu azaltın
APK'nızın boyutu, uygulamanızın ne kadar hızlı yüklendiğini, ne kadar bellek kullandığını ve
ne kadar güç tükettiğini gösterir.
en az bir kaynak belirtelim. Özellikle, uygulamanızın artık kullanmadığı kaynakları kaldırabilirsiniz.
büyük boyutlarda
Drawable
nesne
resim dosyalarının yeri. Bu bölümde, söz konusu yöntemler ve etkisini azaltmanın diğer yolları
uygulamanızdaki kaynakları kullanarak APK'nızın genel boyutunu küçültün.
Kullanılmayan kaynakları kaldırın
lint
aracı: Statik kod analiz edici
Android Studio'ya dahil edilir: res/
klasörünüzde bulunan ve kodunuzun
değildir. lint
aracı,
aşağıdaki örnekteki gibi bir mesaj yazdırır:
res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]
Kodunuza eklediğiniz kitaplıklar, kullanılmayan kaynaklar içerebilir. Gradle,
etkinleştirirseniz kaynakları kendi adınıza kaldırabilirsiniz
shrinkResources
uygulamanın build.gradle.kts
dosyası.
Kotlin
android { // Other settings. buildTypes { getByName("release") { minifyEnabled = true shrinkResources = true proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro") } } }
Eski
android { // Other settings. buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
shrinkResources
özelliğini kullanmak için kod daraltmayı etkinleştirin. Derleme işlemi sırasında önce R8,
kullanılmayan kodları kaldırır. Ardından, Android Gradle eklentisi kullanılmayan kaynakları kaldırır.
Kod ve kaynak küçültme ve Android Studio'nun azaltmanın diğer yolları hakkında daha fazla bilgi için APK boyutu için Uygulamanızı küçültme, gizleme ve optimize etme konusuna bakın.
Android Gradle Plugin 7.0 ve sonraki sürümlerde, uygulamanızın
destekler. Gradle,
resourceConfigurations
.
aromaya ve defaultConfig
seçeneğine. Böylece derleme sistemi,
kaynakların otomatik olarak
desteklenmeyen diğer yapılandırmaların APK'da görünmesini engeller ve APK'nın boyutunu küçültür. Daha fazla
bkz.
Kullanılmayan alternatifi kaldır
kaynaklar bölümüne göz atın.
Kitaplıklardan kaynak kullanımını en aza indirin
Bir Android uygulaması geliştirirken, genellikle uygulamanızın kalitesini iyileştirmek için harici kitaplıkları kullanırsınız kullanılabilirlik ve çok yönlülük. Örneğin, AndroidX eski cihazlarda kullanıcı deneyimini iyileştirmek için Google Play Hizmetleri uygulamanızdaki metinler için otomatik çeviriler.
Kitaplık sunucu veya masaüstü için tasarlanmışsa bilmeniz gerekmez. Kitaplığın yalnızca uygulamanızın ihtiyaç duyduğu bölümleri eklemek için şunları düzenleyebilirsiniz: lisans, kitaplığı değiştirmenize izin veriyorsa kitaplıktaki dosyalara erişebilir. Alternatif olarak, mobil uyumlu kitaplıkla, uygulamanıza belirli işlevler ekleyin.
Yerel animasyonlu resim kodu çözme
Android 12'de (API düzeyi 31), NDK
ImageDecoder
API, kodu çözmek için genişletildi
animasyonlu GIF ve animasyonlu WebP dosya biçimlerini kullanan resimlerdeki tüm kareler ve zamanlama verileri.
Daha fazla bilgi edinmek için üçüncü taraf kitaplıklar yerine ImageDecoder
kullanın
APK boyutunu küçültün ve gelecekten yararlanın
güvenlik ve performansla ilgili güncellemeler içeriyor.
ImageDecoder
API hakkında daha fazla bilgi için şuraya bakın:
API reference
ve
örnek
bulabilirsiniz.
Yalnızca belirli yoğunlukları destekleyin
Android, aşağıdakiler gibi farklı ekran yoğunluklarını destekler:
ldpi
mdpi
tvdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
Android önceki yoğunlukları desteklese de rasterleştirilmiş öğe sayısını en üst düzeye çıkarır.
Kullanıcılarınızın yalnızca küçük bir yüzdesinin belirli yoğunluklara sahip cihazları olduğunu biliyorsanız bu yoğunlukları uygulamanıza eklemeniz gerekip gerekmediğini düşünün. Kaynakları eklemezseniz kullanıyorsanız Android, başlangıçta tasarlanan mevcut kaynakları otomatik olarak ölçeklendirir. başka ekran yoğunlukları da var.
Uygulamanız yalnızca ölçeklendirilmiş resimlere ihtiyaç duyuyorsa, uygulamanın tek bir varyantını kullanarak daha da fazla yer kazanabilirsiniz.
drawable-nodpi/
uygulamasında bir resim. En az bir xxhdpi
eklemenizi öneririz.
resim varyantına ekleyin.
Ekran yoğunlukları hakkında daha fazla bilgi için bkz. Ekran boyutları ve yoğunlukları.
Çekilebilir nesnelerden yararlanın
Bazı görüntüler statik görüntü kaynağı gerektirmez. Çerçeve, resmi otomatik olarak çizebilir.
çalışır. Drawable
nesne veya <shape>
inç
XML - APK'nızda küçük bir yer kaplayabilir. Ayrıca, XML Drawable
nesneler, Materyal Tasarım yönergelerine uygun tek renkli resimler ürettiğinden.
Kaynakları yeniden kullanma
Bir resmin tonlamalı, gölgeli veya aynı resmin döndürülmüş sürümlerini Ancak aynı kaynak grubunu yeniden kullanmanızı öneririz gerektiği şekilde özelleştirebilirsiniz.
Android, bir öğenin rengini değiştirmek için
android:tint
ve tintMode
özellikleri.
Başka bir kaynağın yalnızca döndürülmüş eşdeğeri olan kaynakları da hariç tutabilirsiniz. Aşağıdakiler kod snippet'i, "beğenme" özelliğini açma ile ilgili bir örnek sunar. "beğenme" olarak özetleyerek ortalayıp 180 derece döndürün:
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_thumb_up" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="180" />
Koddan oluştur
Ayrıca, resimlerinizi prosedürlere göre oluşturarak APK boyutunu küçültebilirsiniz. Prosedürel oluşturma artık APK'nızda resim dosyası depolamadığınız için yer açar.
PNG dosyalarında çığır açın
aapt
aracı, res/drawable/
içine yerleştirilen resim kaynaklarını optimize edebilir
kullanarak derleme işlemi sırasında
kayıpsız sıkıştırma yapabilirsiniz. Örneğin, aapt
aracı
256'dan fazla renk gerektirmeyen gerçek renkli bir PNG'yi 8 bit renkli bir PNG'ye dönüştürür
paletini bulmanız gerekir. Bu işlem, görüntünün eşit kalitede olmasını ve daha küçük bir bellek alanı kaplamasını sağlar.
aapt
aşağıdaki sınırlamalara sahiptir:
aapt
aracı,asset/
içinde yer alan PNG dosyalarını küçültmez. tıklayın.aapt
aracının optimize etmesi için resim dosyalarında en fazla 256 renk kullanılması gerekir gerekir.aapt
aracı, önceden sıkıştırılmış PNG dosyalarını büyütebilir. Önlem almak için Bu işlemi PNG dosyalarında devre dışı bırakmak içinisCrunchPngs
işaretini kullanabilirsiniz:
Kotlin
buildTypes.all { isCrunchPngs = false }
Eski
buildTypes.all { isCrunchPngs = false }
PNG ve JPEG dosyalarını sıkıştırın
Resim kalitesini kaybetmeden PNG dosya boyutlarını küçültmek için pngcrush pngquant veya zopflipng olarak gönderebilirsiniz. Tüm bu araçlar Algılanan resim kalitesini korurken PNG dosya boyutunu küçültebilir.
pngcrush
aracı özellikle etkilidir. Bu araç, PNG filtreleri ve
zlib (Deflate) parametrelerini kullanır.
Daha sonra, en küçük sıkıştırılmış çıktıyı sağlayan yapılandırmayı seçer.
JPEG dosyalarını sıkıştırmak için packJPG ve guetzli gibi araçları kullanabilirsiniz.
WebP dosya biçimini kullan
PNG veya JPEG dosyaları yerine WebP dosya biçimini kullanın. WebP biçimi, JPG ve PNG gibi kayıplı sıkıştırma ve şeffaflık sağlar ve daha iyi JPEG veya PNG'ye göre daha sıkıştırılmış bir değerdir.
Android Studio'yu kullanarak mevcut BMP, JPG, PNG veya statik GIF resimlerini WebP biçimine dönüştürebilirsiniz. Daha fazla bilgi için WebP resimleri oluşturma bölümüne bakın.
Vektör grafikleri kullanma
Çözünürlükten bağımsız simgeler ve diğer ölçeklenebilir medyaları oluşturmak için vektör grafikleri kullanabilirsiniz.
APK'nızın ayak izini büyük ölçüde azaltmak için bu grafikleri kullanabilirsiniz. Vektör resimler ise
Android:
VectorDrawable
.
nesneler'i tıklayın. Bir VectorDrawable
nesnesiyle, 100 baytlık bir dosya net bir görüntü oluşturabilir
yardımcı olabilir.
Bununla birlikte, sistemin her bir resmi oluşturması için
VectorDrawable
nesne kullanıyor ve daha büyük resimlerin ekranda görünmesi daha da uzun sürüyor.
Bu nedenle, bu vektör grafiklerini yalnızca küçük resimleri görüntülerken kullanmayı düşünün.
VectorDrawable
nesneleriyle çalışma hakkında daha fazla bilgi için bkz.
Çekilebilir öğeler.
Animasyonlu resimler için vektör grafikler kullanın
Kullanma
AnimationDrawable
.
her kareye ayrı animasyonlar oluşturabilirsiniz. Çünkü bunu yapmak için ayrı bir bit eşlem
dosyası oluşturur. Bu da APK'nızın boyutunu önemli ölçüde artırır.
Bunun yerine
Oluşturmak için AnimatedVectorDrawableCompat
animasyonlu vektör
çekilebilirler.
Yerel ve Java kodunu azaltın
Aşağıdaki yöntemleri kullanarak Java ve yerel kod tabanının boyutunu küçültebilirsiniz. uygulamasını indirin.
Gereksiz oluşturulmuş kodu kaldırın
Otomatik olarak oluşturulan tüm kodların ayak izini anladığınızdan emin olun. Örneğin, birçok protokol arabellek aracı, çok sayıda yöntem ve sınıf oluşturur. Bu yöntem, iki veya daha fazla uygulamanızın boyutunu üç katına çıkarır.
Numaralandırmalardan kaçınma
Tek bir sıralama, uygulamanızın classes.dex
dosyasına yaklaşık 1,0 ila 1,4 KB ekleyebilir. Bu
eklemeler karmaşık sistemler veya paylaşılan kitaplıklar için hızlı bir şekilde biriktirilebilir. Mümkünse
@IntDef
ek açıklamasını ve kod küçültmeyi kullanarak
çıkarmanıza ve tam sayılara dönüştürmenize olanak tanır. Bu tür bir dönüşüm, tüm mevcut
enum'ların tür güvenliği avantajlarını keşfedin.
Yerel ikili programların boyutunu azaltma
Uygulamanız yerel kod ve Android NDK kullanıyorsa sürümün boyutunu da azaltabilirsiniz. uygulamanızın sürümünü öğrenin. Hata ayıklama sembollerini kaldırma ve yerel kitaplıkları çıkarmadığından emin olun.
Hata ayıklama sembollerini kaldır
Uygulamanız geliştirme aşamasındaysa ve hâlâ hata ayıklama gerektiriyorsa hata ayıklama sembolleri kullanmak mantıklıdır. Tekliflerinizi otomatikleştirmek ve optimize etmek için
Gereksiz hata ayıklamayı kaldırmak için Android NDK'da sağlanan arm-eabi-strip
aracı
simgelerinden birini devre dışı bırakır. Ardından sürüm derlemenizi derleyebilirsiniz.
Yerel kitaplıkları çıkarmaktan kaçınma
Uygulamanızın sürüm sürümünü oluştururken sıkıştırılmamış .so
dosyalarını şurada paketleyin:
Ayara göre APK
useLegacyPackaging
Uygulamanızın build.gradle.kts
dosyasında false
konumuna ekleyin. Bu işaretin devre dışı bırakılması,
Şuradan PackageManager
:
yükleme sırasında APK'dan dosya sistemine .so
dosya kopyalanıyor. Bu yöntem
daha küçük hale getirmenize
yardımcı olacaktır.
Birden fazla yalın APK'yı yönetme
APK'nız, kullanıcıların indirdiği ancak hiçbir zaman kullanmadığı (ek dil veya farklı ekran kalitesindeki kaynakları öğrenebilirsiniz. Kullanıcıların indirme işlemini en aza indirmek için uygulamanızı Android App Bundle'ları kullanarak Google Play. Uygulama paketleri yüklemek Google'ın Play, her kullanıcının cihaz yapılandırmasına göre optimize edilmiş APK'lar oluşturup sunun; böylece kullanıcılar yalnızca indirmelerini sağlar uygulamanızı çalıştırmak için gereken kod ve kaynakları içerir. Birden fazla alan oluşturmanız, imzalamanız ve APK'lar farklı cihazları destekler ve kullanıcılar daha küçük ve daha optimize edilmiş indirmeler elde eder.
Uygulamanızı Google Play'de yayınlamıyorsanız uygulamanızı çeşitli APK'lara, ekran boyutu veya GPU doku desteği gibi faktörlere göre farklılık gösterir.
Bir kullanıcı uygulamanızı indirdiğinde, kullandığı cihaza göre doğru APK'yı
özellikler ve ayarlar. Böylece cihazlar, almadığı özelliklerin öğelerini almaz
sahip. Örneğin, kullanıcının hdpi
cihazı varsa xxxhdpi
öğesine ihtiyacı yoktur
daha yüksek yoğunluklu ekranlara sahip cihazlar için ekleyebileceğiniz kaynaklar.
Daha fazla bilgi için Birden fazla öğe oluşturma APK'lar ve Birden fazla APK desteği.