Android APK Boyutu Küçültme

Merhaba Arkadaşlar,
mobilhanem.com üzerinden anlattığımız Android Uygulama Geliştirme derslerimize bu yazımızda Android APK Boyutu Küçültme ile devam edeceğiz. Google Play’e Apk yüklemenin üst sınırı 100 mb‘dır. Android 6 ile birlikte 50 mb olan üst sınır 100 mb’da yükseltilmiştir.

Ancak 100 mb oyunlar dışında pekte mantıklı bir APK boyutu değildir:) APK boyutumuz ne kadar küçük olursa indirilme ve güncellenme olayı daha fazla olur. Her zaman wifi kullanma şansımız olmadığı için ve mobil veri kullanımı daha yüksek ücretli olduğu için kullanıcılar genel olarak yüksek boyutlu uygulamaları hem indirmeye hemde güncellemeye pek yanaşmamaktadır. Buda uygulamanın indirme sayısını düşürmekte ve ya güncelleme sayısını azaltmaktadır.

Peki APK boyutunu nasıl düşürebiliriz. Bunun için farklı farklı yollar bulunmakta. Ben bir kaçından ve en etkililerinden size bahsedeceğim. Ben bunları uyguladığım zaman yaklaşık olarak %30 – 40 oranında APK boyutunu düşürdüm. Tabi bu oran projeden projeye çok farklılık gösterebilir.

1 – Proguard Kullanımı

Uygulamamızı yazarken çok fazla class ve method oluştururuz ve proje büyüdükçe bunlardan bir kısmını kullanmayız. Ama uygulamayı paketlediğimiz zaman kullanmadığımız bu class ve methodlarda uygulamamıza dahil olur ve APK Boyutunu yükseltir. İşte burda Proguard yardımımıza koşuyor ve hem kullanılmayan kodları kaldırıyor hemde kodlarımızı karıştırma yaparak decompile işlemlerinde kodun okunmasını zorlaştırıyor. Proguard kullanımını bu dersimizde anlatmayacağım . Proguard dersimiz için tıklayınız.

2 – Kullanılan imajları optimize etmek

Uygulamalarımıza görsellik katabilmek için imajlar kullanırız. Bu imajlar genel olarak PNG ve JPG formatındadır. Bu imajları kullanmadan önce bazı optimize toolları ile imajın kalitesini düşürmeden boyutunu düşürebiliriz(Bazen %70 lere kadar düşerebiliyoruz). İnternetten bu toolları bulabilirsiniz. Ama ben iki tane örnek tool paylaşıyorum. Tool 1 ve Tool 2.

Ayrıca Android 4.0’dan sonra yeni bir imaj formatını desteklemeye ve kullanımını önermeye başladı. WebP adında olan bu format png ve jpeg’den dönüşüm için uygundur ve aynı kalitede daha küçük boyutlara sahiptir. Ben uygulamalarımda bu formatı kullanmaya başladım, sizlerede öneririm. WebP hakkında daha detaylı yazıyı buradan bulabilir ve imajlarınızı WebP formatına çevirmek için hazırlanmış tool’ları aynı linkten bulabilirsiniz.

3 – Shape Drawable Kullanmak

Bunlara ek olarak shape drawable kullanarak gradient ,round, border gibi özellikleri kendimiz ayarlayarak image’lara, butonlara ,edittextlere background verebiliriz. Mesala bir butonumuz var ve bu butonun kenarları oval,gradient vererek ,tıklandığında başka bir renge dönmesi gibi işlemleri shape drawable kullanarak yapabiliriz. Böylelikle imaj kullanmak yerine kod ile bu işi halledebilir ve uygulama boyutunu düşürebiliriz.
Örnek bir shape drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:radius="14dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#7995A8"
android:startColor="#E8E8E8"
android:endColor="#000000"
android:type="linear"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="270dp"
android:height="60dp"
/>
<stroke
android:width="3dp"
android:color="#878787"
/>
</shape>

Elde edilen buton görüntüsü:
shape drawable buton

 

Yukarıda ki butonu imaj kullanarakta yapabilirdik, fakat bu şekilde kullanırsak APK boyutumuzu düşürmüş oluruz.

4 – shrinkingResources Kullanmak

Proguard kullanımı gereksiz class ve methodları sildiğini söylemiştik. Ancak Proguard gereksiz java kodlarını siliyor. Gereksiz , yani kullanılmayan resources’ları silmek için build.gradle ‘mıza aşağıdaki kodu ekliyoruz.

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
        }
    }
}

Kullanılmayan source’ları otomatik olarak silecektir. Mesala yukarıdaki buton için oluşturmuş olduğumuz drawable shape xml file’mızı artık kullanmıyoruz.shrinkResources true yaparak APK’mıza dahil olmayacaktır ve APK boyutumuz biraz daha küçülecektir.

5 – resConfigs Kullanmak

Uygulamamıza çoğu zaman kütüphaneler eklemekteyiz. Örneğin google play services library. Bu kütüphaneler genel olarak kendi içlerinde birden fazla dil desteği vermektedirler. Destek verdiği her dil için farklı farklı string dosyaları bulunmaktadır. Ama biz uygulamamızı sadece Türkçe ve İngilizce olarak piyasaya sunuyoruz diyelim. Apk’mızı oluşturduğumuz an tüm dil dosyaları’da Apk’mıza dahil olacaktır. Bunu engellemek için aşağıdaki kodu build.gradle dosyamıza ekleyebiliriz.

android {
    defaultConfig {
        resConfigs "en", "tr"
    }
}

Böylelikle sadece Türkçe ve İngilizce dil dosyaları Apk’mıza eklendi. Diğerleri ise eklenmeyerek Apk boyutumuz küçültüldü.

Arkadaşlar bunların dışında kullanılmayan dosyaları manuel olarak silme işleminden bahsedeceğim.
Android Studio’da projemize sap tıklayıp -> Refactor -> Remove Unused Resources seçeneğini seçerek uygulamada kullanılmayan dosyaları önce görüntüleyip istediklerinizi silebilirsiniz.

Aynı şekilde projemiz açıkken Analyze -> Inspect Code seçeneğini seçip , altta listelenen kısımdan Declaration redundancy -> Unused declaration ve Unused method parameters kısmını açıp kullanılmayan java kodlarını ve parametrelerini görüntüleyebilir ve manuel olarak silebilirsiniz.

Bu dersimde anlatmak istediklerim bu kadar . Bir sonraki Android dersimde Firebase Cloud Messaging kullanımını anlatacağım.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

14

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?