Uygulamanızın boyutunu küçültün

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

Google Play'de yayınlarken uygulama boyutunda hemen tasarruf etmek için uygulamanızı Android App Bundle olarak yükleyin. 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 ve CERT.RSA imzasını içerir dosyalarının yanı sıra MANIFEST.MF manifest dosyasına da erişebilirsiniz.
  • assets/: Uygulamanın bir öğe kullanarak alabileceği uygulama öğelerini içerir AssetManager nesnesini tanımlayın.
  • res/: resources.arsc içine derlenmemiş kaynaklar içerir.
  • lib/: Bir işlemcinin yazılım katmanına özgü derlenmiş kodu içerir. Bu dizin, her platform türü için bir alt dizin içerir (ör. armeabi, armeabi-v7a, arm64-v8a, x86, x86_64 ve mips).

Bir APK aşağıdaki dosyaları da içerir. Yalnızca AndroidManifest.xml zorunludur:

  • resources.arsc: Derlenmiş kaynaklar içerir. Bu dosya, res/values/ klasörünün tüm yapılandırmalarındaki XML içeriğini içerir. Paketleme aracı bu XML içeriğini ayıklayıp ikili biçime derleyip 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 makinesidir.
  • 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 azaltma

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. İçerdiği kaynakların sayısını ve boyutunu azaltarak APK'nızı küçültebilirsiniz. Özellikle, uygulamanızın artık kullanmadığı kaynakları kaldırabilir ve ölçeklenebilir çözümler kullanabilir 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ırma

lint aracı: Statik kod analiz edici Android Studio'ya dahil edilir: res/ klasörünüzdeki kodunuzun bir referans değildir. lint aracı, projenizde kullanılmayan bir kaynak keşfettiğinde 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ı.

KotlinGroovy
android {
    // Other settings.

    buildTypes {
        getByName("release") {
            minifyEnabled = true
            shrinkResources = true
            proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro")
        }
    }
}
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. R8, derleme işlemi sırasında önce 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 APK boyutunu küçültmenin diğer yolları hakkında daha fazla bilgi için Uygulamanızı küçültme, karartma ve optimize etme başlıklı makaleyi inceleyin.

Android Gradle Plugin 7.0 ve sonraki sürümlerde, uygulamanızın destekler. Gradle, resourceConfigurations. aromaya ve defaultConfig seçeneğine. Ardından derleme sistemi, desteklenmeyen diğer yapılandırmalardaki kaynakların APK'da görünmesini engelleyerek APK'nın boyutunu küçültür. Bu özellik hakkında daha fazla bilgi için Kullanılmayan alternatif kaynakları kaldırma başlıklı makaleyi inceleyin.

Kitaplıklardan kaynak kullanımını en aza indirin

Android uygulaması geliştirirken genellikle uygulamanızın kullanılabilirliğini ve çok yönlülüğünü iyileştirmek için harici kitaplıklar kullanırsınız. Örneğin, eski cihazlardaki kullanıcı deneyimini iyileştirmek için AndroidX'e referans verebilir veya uygulamanızdaki metinlerin otomatik çevirilerini almak için Google Play Hizmetleri'ni kullanabilirsiniz.

Kitaplık bir sunucu veya masaüstü için tasarlandıysa birçok nesne ve yöntem içerebilir. 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'si, animasyonlu GIF ve animasyonlu WebP dosya biçimlerini kullanan resimlerdeki tüm karelerin ve zamanlama verilerinin kodunu çözecek şekilde genişletildi.

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ı destekleme

Android, aşağıdakiler gibi farklı ekran yoğunluklarını destekler:

  • ldpi
  • mdpi
  • tvdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

Android, yukarıdaki yoğunlukları desteklese de rasterleştirilmiş öğelerinizi her yoğunluğa dışa aktarmanız gerekmez.

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 için yalnızca ölçeklendirilmiş resimler gerekiyorsa tek bir varyant kullanarak daha da fazla alan 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ı ve çalışma zamanında gerektiği gibi özelleştirmenizi öneririz.

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 örneği "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

Resimlerinizi işleme yöntemiyle oluşturarak APK boyutunuzu da küçültebilirsiniz. Prosedürel oluşturma artık APK'nızda resim dosyası depolamadığınız için yer açar.

PNG dosyalarını sıkıştırma

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/ klasöründeki PNG dosyalarını küçültmüyor.
  • aapt aracının resim dosyalarını optimize edebilmesi için resim dosyalarında en fazla 256 renk kullanılmış olmalıdır.
  • aapt aracı, zaten sıkıştırılmış PNG dosyalarını şişirebilir. Önlem almak için Bu işlemi PNG dosyalarında devre dışı bırakmak için isCrunchPngs işaretini kullanabilirsiniz:
  • KotlinEski
        buildTypes.all { isCrunchPngs = false }
        
        buildTypes.all { isCrunchPngs = false }
        

PNG ve JPEG dosyalarını sıkıştırın

pngcrush, pngquant veya zopflipng gibi araçları kullanarak resim kalitesini kaybetmeden PNG dosya boyutlarını küçültebilirsiniz. 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. Ardından, en küçük sıkıştırılmış çıkışı 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 Android'de VectorDrawable nesneleri olarak temsil edilir. Bir VectorDrawable nesnesiyle, 100 baytlık bir dosya net bir görüntü oluşturabilir yardımcı olabilir.

Bununla birlikte, sistemin her bir içeriği 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 resimler gösterirken kullanmayı düşünün.

VectorDrawable nesneleriyle çalışma hakkında daha fazla bilgi için Çizilebilirler bölümüne bakın.

Animasyonlu resimler için vektör grafikler kullanın

Kare kare animasyon oluşturmak için AnimationDrawable kullanmayın. Bunu yaptığınızda animasyondaki her kare için ayrı bir bitmap dosyası eklemeniz gerekir. 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

Uygulamanızdaki Java ve yerel kod tabanının boyutunu azaltmak için aşağıdaki yöntemleri kullanabilirsiniz.

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 ya da daha fazla uygulamanızın boyutunu üç katına çıkarır.

Numaralandırmalardan kaçınma

Tek bir enum, uygulamanızın classes.dex dosyasına yaklaşık 1,0 ila 1,4 KB eklenebilir. Bu karmaşık sistemler veya paylaşılan kitaplıklarda eklemeler hızlı bir şekilde birikebilir. Mümkünse @IntDef ek açıklamalarını ve kod küçültme özelliğini kullanarak listeleri çıkarıp tam sayılara dönüştürebilirsiniz. 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ırma

Uygulamanız geliştirme aşamasındaysa ve hâlâ hata ayıklama gerektiriyorsa hata ayıklama simgelerini kullanmak mantıklı bir seçimdir. Yerel kitaplıklardan gereksiz hata ayıklama simgelerini kaldırmak için Android NDK'da sağlanan arm-eabi-strip aracını kullanın. 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şaret devre dışı bırakıldığında PackageManager, yükleme sırasında .so dosyalarını APK'dan dosya sistemine kopyalayamaz. Bu yöntem daha küçük hale getirmenize yardımcı olacaktır.

Birden fazla yalın APK'yı koruma

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ı kullanan 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 ekran boyutu veya GPU doku desteği gibi faktörlere göre farklılaştırılmış birkaç APK'ya ayırabilirsiniz.

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.