ProGuard/R8: Android Uygulamalarının Karartılması ve Korunması

Yazar: IT Sectr Yayınlanma: 2026-02-14 Okuma süresi: 8 dk

ProGuard ve R8, Android uygulamaları için karartma, küçültme ve optimizasyon araçlarıdır. 2002 yılında oluşturulan ProGuard, uzun süre Java kodu koruması için fiili standart olmuştur. R8, Google tarafından geliştirilen ve AGP 3.4'ten itibaren Android Gradle Plugin'e entegre edilen halefidir. Her iki araç da APK boyutunu azaltır, ölü kodu kaldırır ve tersine mühendisliği zorlaştırır. Android Developers'a göre R8, karşılaştırılabilir karartma kalitesiyle ProGuard'dan 2–3 kat daha hızlı derleme yapar.

Önemli Noktalar

  • ProGuard — Java bayt kodu karartma ve optimizasyon aracı, 2000'lerden beri Android standardı
  • R8 — Google'ın ProGuard halefi, AGP'ye entegre, tek geçişte karartma, küçültme ve optimizasyon yapar
  • Karartma sınıfları ve metotları kısa isimlerle yeniden adlandırarak uygulamanın tersine mühendisliğini zorlaştırır
  • Küçültme kullanılmayan sınıfları, metotları ve alanları kaldırarak nihai APK/AAB boyutunu azaltır
  • ProGuard kuralları (.pro dosyaları) kodun hangi bölümlerinin korunacağını, karartılacağını veya kaldırılacağını kontrol eder

ProGuard Nedir?

ProGuard, Java bayt kodunun karartılması, küçültülmesi, optimize edilmesi ve ön doğrulaması için açık kaynaklı bir araçtır (Apache 2.0). Eric Lafarge tarafından 2002 yılında SourceForge projesinin bir parçası olarak geliştirilmiştir. ProGuard, derlenmiş Java sınıflarını (.class) veya JAR arşivlerini girdi olarak alır ve aynı formatta işlenmiş sınıflar üretir, ancak daha küçük boyutlu ve yeniden adlandırılmış öğelerle.

Uzun süre ProGuard, Android uygulamalarını tersine mühendislikten koruyan tek standarttı. Google, Android SDK'da kullanımını resmi olarak önermiş ve SDK araçları içindeki proguard-android-optimize.txt dosyasında varsayılan bir yapılandırma sağlamıştır. ProGuard, Java kodunun bayt koduna derlenmesinden sonra ve DEX'e paketlenmesinden önce çalıştırılan ayrı bir araç olarak çalışıyordu.

ProGuard Mimarisi

ProGuard dört ardışık aşamadan oluşur: shrink (kullanılmayan sınıfların kaldırılması), optimize (bayt kodu optimizasyonu — ekleme, ölü kod kaldırma), obfuscate (sınıfların, metotların ve alanların kısa adlarla yeniden adlandırılması), preverify (JVM uyumluluk kontrolü). Her aşama, yapılandırma dosyalarındaki ayrı kurallarla kontrol edilir.

Karartma aşamasında ProGuard, orijinal adları karartılmış adlarla eşleyen bir eşleme dosyası (mapping.txt) oluşturur. Bu dosya, retrace yardımcı programı aracılığıyla sürüm derlemelerinden çökme günlüklerini kod çözmek için kritiktir. Eşleme dosyası olmadan, bir yığın izi a(), b(), c() harflerinden oluşan bir kümeye dönüşür ve orijinal bağlamı geri yüklemenin hiçbir yolu yoktur.

ProGuard AşamasıAmaçSonuç
ShrinkÇağrı grafiği analizi ve ölü kod kaldırmaAPK'da daha az sınıf
OptimizeMetot ekleme, kullanılmayan parametreleri kaldırmaDaha hızlı kod yürütme
ObfuscateSınıfları, alanları ve metotları yeniden adlandırmaTersine mühendislik koruması
PreverifyJVM için StackMap öznitelikleri eklemeJava 6+ uyumluluğu

R8 Nedir?

R8, Google'ın bir sonraki nesil karartma ve küçültme aracıdır ve ilk olarak Android Studio 3.3'te (Kasım 2018) tanıtılmış ve AGP 3.4'te (Ağustos 2019) standart hale gelmiştir. ProGuard'ın aksine R8, Java bayt kodunu DEX formatına dönüştüren D8/R8 derleyicisinin bir parçasıdır. R8, tüm aşamaları — karartma, küçültme ve optimizasyon — tek bir geçişte gerçekleştirir ve araçlar arasında ara dosyalar iletilmez.

Google, R8'i iki hedefle geliştirmiştir: derlemeleri hızlandırmak (ProGuard harici bir araç olarak çalışıyordu) ve modern Android yığınıyla (Desugar, Core Library Desugaring, D8) sorunsuz entegrasyon sağlamak. R8, Kotlin ve Java ile yazılmıştır ve AOSP'deki (Android Açık Kaynak Projesi) R8/Desugar deposunun bir parçasıdır.

R8'in önemli bir avantajı, ProGuard kurallarıyla tam geriye dönük uyumluluktur. Mevcut .pro dosyaları değişiklik yapılmadan çalışır. R8, -whyareyoukeeping, -printconfiguration ve -printmapping dahil olmak üzere belirli ProGuard yönergelerini bile destekler. Bu, ProGuard'dan R8'e geçişin şeffaf olduğu anlamına gelir: sadece AGP'yi güncelleyin.

kotlin
// build.gradle.kts — minifyEnabled ile R8'i etkinleştirme
android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true

            proguardFiles(
                // Android SDK'dan temel yapılandırma
                getDefaultProguardFile("proguard-android-optimize.txt"),
                // Özel proje kuralları
                "proguard-rules.pro"
            )
        }
    }
}

Kod, standart bir sürüm derleme yapılandırmasını gösterir. isMinifyEnabled = true bayrağı, karartma ve optimizasyon için R8'i etkinleştirir. isShrinkResources = true, kullanılmayan kaynakları ek olarak kaldırır. getDefaultProguardFile, SDK'dan varsayılan kuralları yüklerken, proguard-rules.pro projeye özel ayarları içerir.

Android'de Kod Karartma

Karartma, kaynak kodun insanlar tarafından analiz edilmesi zor ancak tam işlevselliği koruyan bir forma dönüştürülmesi sürecidir. Android bağlamında karartma, sınıfları, metotları ve alanları kısa, anlamsız adlarla yeniden adlandırmak anlamına gelir: com.example.app.auth.LoginManager a.a.a olur, authenticateUser metodu a olur, userToken alanı b olur.

Karartma Neden Gereklidir

Android APK dosyaları, herhangi bir arşivleyiciyle (ZIP, 7z, WinRAR) açılabilen arşivlerdir. Karartma olmadan, bir saldırgan uygulamanın tam haritasını alır: paket adları, sınıflar, metotlar ve alanlar. jadx veya Bytecode Viewer gibi araçlar, DEX dosyalarından saniyeler içinde neredeyse orijinal Java kodunu geri yükleyebilir. Karartma, kodu savunmasız hale getirmez, ancak giriş engelini önemli ölçüde yükseltir: anlamlı adlar yerine okuyucu a(), b(), c() görür.

Tipik karartma hedefleri: ticari mantığı koruma (algoritmalar, hesaplama formülleri), API anahtarları ve token'larının çalınmasını engelleme, yansıma yoluyla sınıf değiştirmeyi önleme ve APK yama ve değişikliğini (yeniden paketleme saldırısı) önleme. Pratikte, görevlerin %70'i yalnızca yeniden adlandırmayla çözülür — bu nedenle ProGuard/R8 kullanılır.

ProGuard Kural Örneği

Aşağıda, Retrofit, Gson ve Parcelable ile bir Android projesi için tipik bir proguard-rules.pro dosyası bulunmaktadır. -keep kuralları, yansıma yoluyla kütüphane işlemi için gerekli olan sınıfları ve metotları korur. Bu kurallar olmadan R8, kütüphanenin dize adıyla eriştiği sınıfları kaldıracak veya yeniden adlandıracaktır.

pro
# =====================
# Retrofit — arayüzlerin korunması
# =====================
-keep,allowobfuscation,allowshrinking interface retrofit2.** { *; }
-keepattributes Signature, Exceptions

# =====================
# Gson — JSON serileştirme
# =====================
-keepclassmembers class * {
    @com.google.gson.annotations.SerializedName <fields>;
}
-keep class *.serialization.** {
    <fields>;
}

# =====================
# Parcelable — Creator
# =====================
-keepclassmembers class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator CREATOR;
}

# =====================
# Logging — sürümden günlükleri kaldırma
# =====================
-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(String, int);
    public static int v(...);
    public static int d(...);
    public static int i(...);
    public static int w(...);
    public static int e(...);
}

# =====================
# Kotlin veri sınıfları — yapıcıları koruma
# =====================
-keepclassmembers class * {
    @kotlin.Metadata <fields>;
}

# =====================
# Activity — giriş noktası
# =====================
-keep class * extends android.app.Activity {
    @android.annotation.SuppressLint <methods>;
}

.pro dosyasındaki her yönerge belirli bir görevi çözer. -keep, tüm sınıfın kaldırılmasını veya yeniden adlandırılmasını önler. -keepclassmembers yalnızca sınıf üyelerini (alanlar ve metotlar) korur ancak sınıfın kendisinin kullanılmıyorsa kaldırılmasına izin verir. -assumenosideeffects, R8'e bir metot çağrısının yan etkisi olmadığını ve güvenle kaldırılabileceğini söyler. -keepattributes yönergesi, bayt kodundaki meta verileri — ek açıklamalar, imzalar, istisnalar — korur.

Retrofit için -keep,allowobfuscation,allowshrinking kuralı, R8'in arayüzleri yeniden adlandırmasına ancak kaldırmamasına izin verir. Bu gereklidir çünkü Retrofit, dinamik proxy'ler (java.lang.reflect.Proxy) aracılığıyla arayüzlere erişir ve kaldırma, çalışma zamanında ClassNotFoundException'a neden olur. Benzer şekilde Gson, @SerializedName ile ek açıklanmış alanlara erişmek için yansıma kullanır — -keepclassmembers olmadan alanlar kullanılmadığı gerekçesiyle kaldırılacaktır.

Küçültme ve ShrinkResources

Küçültme (shrinking), son derlemeden kullanılmayan kod ve kaynakların kaldırılması sürecidir. ProGuard ve R8, giriş noktalarından (Activity, Service, BroadcastReceiver) başlayarak çağrı grafiğini analiz eder ve çağrı zinciri aracılığıyla ulaşılamayan sınıfları ve metotları kaldırır. ShrinkResources, res/ (layout, drawable, string, color) öğesinden kullanılmayan kaynakları kaldıran ek bir aşamadır.

Küçültme, kütüphaneleri olan büyük projelerde en büyük faydayı sağlar. Tipik bir senaryo: bir proje, bağlı bir kütüphaneden (örneğin Google Play Services) kodun %10'unu kullanır. Küçültme olmadan, tüm kütüphane kodu APK'ya girer. Küçültme ile R8, kütüphane kodunun %70–90'ını kaldırır ve yalnızca gerçekten kullanılan sınıfları ve metotları bırakır. Bu, APK boyutunu, yükleme süresini ve bellek tüketimini doğrudan etkiler.

ShrinkResources Çalışırken

ShrinkResources mekanizması, kod küçültmeyle birlikte çalışır. R8 hangi sınıfların kullanıldığını belirledikten sonra, kaynak küçültme koddan kaynak referanslarını analiz eder: R.layout.main, R.drawable.icon, getString(R.string.title). Doğrudan veya dolaylı referansı olmayan tüm kaynaklar, son APK veya AAB'den kaldırılır. Bu, resources.arsc kaynak dosyası ve res/ klasörleri kullanılarak yapılır.

Önemli bir nüans: kaynaklara getIdentifier() veya Resources.getResourceName() aracılığıyla dize adıyla erişilebilir ve R sınıfı atlanabilir. Bu gibi durumlarda, R8 doğrudan bir bağlantı görmez ve fiilen kullanılan bir kaynağı kaldırabilir. Bu tür kaynakları korumak için -keep class **.R$* { *; } yönergesi vardır — R sınıfının tüm tanımlayıcılarını korur.

xml
<!-- Örnek: yalnızca getIdentifier() aracılığıyla kullanılan kaynak -->
<string name="dynamic_title_welcome">Hoş Geldiniz</string>
<string name="dynamic_title_share">Paylaş</string>

<!-- Dizeye göre erişen Kotlin kodu -->
<!-- val title = getString(resources.getIdentifier( -->
<!--     \"dynamic_title_${type}\", \"string\", packageName)) -->

Bu durumda R8, R sınıfındaki dynamic_title_welcome öğesine statik bir referans görmez çünkü erişim dinamik bir adla getIdentifier aracılığıyla yapılır. Bu tür kaynakları korumak için proguard-rules.pro dosyasına -keepclassmembers class **.R$string { *; } yönergesini ekleyin — tüm R$string sınıflarından herhangi bir alanın kaldırılmasını engeller.

YönergeAmaçÖrnek
-keepSınıfı ve tüm üyelerini korur-keep class com.example.api.** { *; }
-keepclassmembersYalnızca sınıf üyelerini korur-keepclassmembers class * { @SerializedName <fields>; }
-keepattributesBayt kodu meta verilerini korur-keepattributes *Annotation*, Signature
-assumenosideeffectsYan etkisi olmayan çağrıları kaldırır-assumenosideeffects class Log { d(...); }
-dontwarnUyarıları bastırır-dontwarn com.example.legacy.**

R8 vs ProGuard: Temel Farklar

R8, ProGuard'ın halefi olmasına rağmen, araçlar arasında mimari, performans ve davranış açısından temel farklılıklar vardır. Google, AGP 7.0'dan itibaren Android Gradle Plugin'de ProGuard desteğini resmi olarak sonlandırmıştır, ancak ProGuard, R8'de bulunmayan belirli optimizasyon davranışı gerektiren projelerde kullanılmaya devam etmektedir.

Karşılaştırma Tablosu

ÖzellikProGuardR8
GeliştiriciGuardSquare (Eric Lafarge)Google
Çıkış Yılı20022018 (2019'da kararlı)
Mimari4 ayrı aşama (shrink → optimize → obfuscate → preverify)Tek geçiş: shrink + optimize + obfuscate aynı anda
AGP EntegrasyonuHarici araç, javac'tan sonra çalıştırılırD8 DEX derleyicisine entegre
Derleme Hızı2–3 kat daha yavaşTek geçiş ve yerel entegrasyon sayesinde daha hızlı
Kotlin DesteğiSınırlı (inline, lambdas, coroutines ile ilgili sorunlar)Tam: coroutines, inline işlevler, data class
Eşleme Dosyasımapping.txt (retrace ile uyumlu)mapping.txt (aynı biçim)
Optimizasyon Özelleştirme60+ seçenek -optimizationpasses, -optimizationsSınırlı: çoğu optimizasyon varsayılan olarak etkin
Destek DurumuR8 ile değiştirildi (AGP 7.0+ kullanmaz)Aktif geliştirme, AOSP'nin parçası

R8'in Derlemeyi Bozabileceği Durumlar

R8, ölü olduğunu düşündüğü kodu kaldırmada ProGuard'dan daha agresiftir. Bu, hata ayıklama derlemesinin çalıştığı ancak sürüm derlemesinin ClassNotFoundException veya NoSuchMethodException ile çöktüğü durumlara yol açar. Tipik durumlar: sınıf adına göre yansıma kullanan kütüphaneler (Gson, Moshi, Retrofit, Room, Dagger); ServiceLoader veya java.util.ServiceLoader çağrıları; dinamik proxy'ler (java.lang.reflect.Proxy); yerel metotlar (JNI). Çözüm, yansıma yoluyla çağrılan tüm sınıflar için -keep eklemektir.

pro
# Tipik yansıma sorunları — R8 statik bağlantıyı görmez

# Room — DAO ve geçişleri koruma
-keep class * extends androidx.room.RoomDatabase { *; }
-keep class *.DatabaseMigrations { *; }

# Dagger / Hilt — bileşenleri koruma
-keep class * extends dagger.hilt.android.components.** { *; }

# JNI — yerel metotları yeniden adlandırmama
-keepclasseswithmembernames class * {
    native <methods>;
}

# Data Binding — Binding sınıflarını koruma
-keep class *.databinding.** { *; }

Kuralları ekledikten sonra derleme hala çöküyorsa, proguard-rules.pro dosyasında -printconfiguration full-config.txt bayrağını kullanın. R8, hangi kuralların uygulandığını ve hangi sınıfların korunduğunu gösteren tam bir yapılandırma dosyası oluşturacaktır. -whyareyoukeeping class com.example.MyClass yönergesi de kullanışlıdır — R8'in belirli bir sınıfı korumaya karar vermesinin nedenini gösterir.

ProGuard Kurallarını Yapılandırma

ProGuard kurallarının doğru yapılandırılması, çalışma zamanı hataları olmadan kararlı karartmanın anahtarıdır. Aşağıda, yeni bir proje veya karartmanın hatalara neden olduğu bir proje için adım adım kurulum süreci bulunmaktadır.

Adım 1: Temel Yapılandırma

Standart Android SDK dosyası olan proguard-android-optimize.txt'yi dahil ederek başlayın. Temel Android bileşenleri için kurallar içerir: Activity, Service, BroadcastReceiver, ContentProvider, View, Fragment. Bu dosya SDK klasöründe bulunur: $ANDROID_HOME/tools/proguard/proguard-android-optimize.txt. AGP kullanıyorsanız, getDefaultProguardFile onu otomatik olarak yükleyecektir.

Adım 2: Kütüphaneler

Her popüler kütüphanenin önerilen ProGuard kuralları vardır. Retrofit, OkHttp, Glide, Fresco, Coil, Room, Dagger/Hilt, Kotlin Coroutines — hepsi belirli -keep kuralları gerektirir. Genellikle kurallar AAR kütüphanesine dahil edilir ve tüketici koruma kuralları aracılığıyla otomatik olarak bağlanır. Kütüphanenin AAR içinde bir proguard.txt dosyası sağlayıp sağlamadığını kontrol edin — bu, kuralların zaten dikkate alındığını gösterir.

Adım 3: Sürüm Derlemesini Test Etme

Yayınlamadan önce, sürüm derlemesini gerçek bir cihazda veya öykünücüde test ettiğinizden emin olun. Karartma sorunları yalnızca çalışma zamanında ortaya çıkar. Kontrol edin: kimlik doğrulama (giriş/kayıt), ağdan veri yükleme, ekranlar arasında gezinme, kamera ve galeri, push bildirimleri, Deeplink'ler, WebView. Sürüm derlemesindeki her çökme, eşleme dosyasıyla retrace kullanılarak kodu çözülmeli ve eksik -keep kuralları eklenmelidir.

Adım 4: Eşleme Dosyası ve CI

Eşleme dosyası build/outputs/mapping/release/mapping.txt konumunda oluşturulur. Bu dosya korunmalıdır: onsuz Google Play Console'dan çökme günlüklerini kodu çözmek imkansızdır. mapping.txt'yi sürüm kontrol sisteminize ekleyin veya CI yapıtları olarak yükleyin. Google Play Console, uploading mapping.txt etkinken bir AAB yüklerken eşleme dosyasını otomatik olarak kabul eder.

Aşağıda, her kural grubu için yorumlar içeren proguard-rules.pro dosyasında tam bir karartma kurulum iş akışı bulunmaktadır.

pro
# ===========================================
# proguard-rules.pro — tam örnek
# ===========================================

# --- Genel ayarlar ---
-keepattributes *Annotation*, Signature, Exceptions, InnerClasses, EnclosingMethod
-dontpreverify

# --- Android bileşenleri ---
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.Fragment
-keep public class * extends androidx.fragment.app.Fragment
-keep public class * extends android.view.View

# --- OkHttp / Retrofit ---
-dontwarn okhttp3.**
-dontwarn okio.**
-keep class retrofit2.** { *; }
-keepattributes Exceptions

# --- Gson / Moshi ---
-keepclassmembers class * {
    @com.google.gson.annotations.SerializedName <fields>;
}
-keep class com.google.gson.** { *; }

# --- Firebase ---
-keep class com.google.firebase.** { *; }
-keep class com.google.android.gms.** { *; }

# --- Kotlin Coroutines ---
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}

# --- Serileştirme ---
-keepclassmembers class * implements java.io.Serializable {
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# --- Yalnızca R8: zorunlu koruma ---
# (ProGuard bu yönergeyi yok sayar)
-keep,allowobfuscation class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator CREATOR;
}

Yapılandırmadan sonra derlemeyi çalıştırın: ./gradlew assembleRelease. build/outputs/mapping/release/ içinde dosyaların göründüğünü doğrulayın: mapping.txt (orijinal adlardan karartılmış adlara eşleme), seeds.txt (-keep kurallarıyla korunan sınıflar), usage.txt (küçültme sırasında kaldırılan sınıflar). Karartma sonrası APK boyutu, bağlı kütüphanelerin sayısına bağlı olarak %20–50 oranında azalmalıdır.

Sıkça Sorulan Sorular

R8, ProGuard'dan nasıl farklıdır?

R8, ProGuard'ın halefidir ve Google tarafından geliştirilmiştir. R8, karartma, küçültme ve optimizasyonu tek geçişte yapar, ProGuard'dan 2–3 kat daha hızlı çalışır ve doğrudan Android Gradle Plugin'e entegredir. ProGuard dört ayrı aşama kullanır ve harici yürütme gerektirir. AGP 7.0'dan itibaren ProGuard kullanılmaz — varsayılan olarak R8 çalışır.

R8 kullanırken ProGuard kuralları yazmam gerekir mi?

Evet, R8 aynı ProGuard kurallarını (.pro dosyaları) kullanır. -keep, -keepclassmembers, -keepattributes, -assumenosideeffects yönergeleri aynı şekilde çalışır. Temel kurallar Android SDK'daki proguard-android-optimize.txt dosyasında gelirken, kütüphaneye özel kurallar (Retrofit, Room, Gson) projenin proguard-rules.pro dosyasına eklenir. Bu kurallar olmadan R8, yansıma yoluyla çalışan kütüphaneler için gerekli sınıfları kaldırabilir.

Android projesinde R8 nasıl etkinleştirilir?

R8, AGP 3.4'ten itibaren Android Gradle Plugin'de varsayılan olarak etkindir. Küçültmeyi etkinleştirmek için build.gradle.kts dosyasının release buildType bloğunda isMinifyEnabled = true olarak ayarlayın. Ek bayrak isShrinkResources = true, kullanılmayan kaynakların kaldırılmasını etkinleştirir. gradle.properties dosyasında android.enableR8=false ile R8'i zorla devre dışı bırakabilirsiniz, ancak bu önerilmez — R8 daha hızlı ve kararlıdır.

Android'de kod karartma nedir?

Karartma — sınıfların, metotların ve alanların kısa anlamsız adlarla (a, b, c) yeniden adlandırılmasıdır. com.example.app.auth.LoginManager sınıfı a.a.a olur, authenticateUser metodu a olur. Bu, uygulamanın tersine mühendisliğini zorlaştırır ancak yürütme mantığını etkilemez. ProGuard ve R8 yalnızca -keep kurallarıyla korunmayan öğeleri yeniden adlandırır. Eşleme dosyası, çökme günlüklerini kodu çözmek için orijinal ve karartılmış adların karşılığını korur.

Karartılmış bir uygulamadan çökme günlüğü nasıl hata ayıklanır?

Bir yığın izinin kodunu çözmek için retrace yardımcı programını (ProGuard/R8 SDK'sının parçası) kullanın. Komut: retrace mapping.txt crash-stacktrace.txt. Eşleme dosyası build/outputs/mapping/release/mapping.txt konumunda bulunur. Google Play Console, bir AAB yayınlarken mapping.txt yüklemeyi de destekler — çökme günlükleri konsolda otomatik olarak kodu çözülür. Eşleme dosyası olmadan, yığın izi yalnızca a.b.c() gibi karartılmış adlar içerir ve bu da hata ayıklama için işe yaramaz.

Özet

  • ProGuard — dört ardışık aşamadan oluşan klasik bir Java bayt kodu karartma ve optimizasyon aracı
  • R8 — Google'ın modern halefi, AGP'ye entegre, tüm aşamaları 2–3 kat daha yüksek performansla tek geçişte gerçekleştirir
  • Karartma sınıfları, metotları ve alanları kısa adlarla yeniden adlandırarak tersine mühendisliği zorlaştırır ve uygulamanın ticari mantığını korur
  • Küçültme kullanılmayan kod ve kaynakları kaldırarak tipik projelerde APK boyutunu %20–50 oranında azaltır
  • ProGuard kuralları (.pro dosyaları) karartma davranışını kontrol eder — -keep, -keepclassmembers, -assumenosideeffects yönergeleri hangi öğelerin korunacağını, kaldırılacağını veya yeniden adlandırılacağını belirtir
  • Eşleme dosyası (mapping.txt), retrace aracılığıyla sürüm derlemelerinden çökme günlüklerini kodu çözmek için kritik derecede önemli bir derleme yapıtıdır
  • Test, gerçek bir cihazda sürüm derlemesinin zorunludur — karartma sorunları yalnızca çalışma zamanında ortaya çıkar ve eksik -keep kurallarının eklenmesini gerektirir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun