Sök…


Regler för några av de allmänt använda biblioteken

För närvarande innehåller det regler för följande bibliotek: -

  1. Smörkniv
  2. RxJava
  3. Android Support Library
  4. Android Design Support Library
  5. Retrofit
  6. Gson och Jackson
  7. otto
  8. Crashlitycs
  9. Picasso
  10. Volley
  11. OkHttp3
  12. Parcelable
#Butterknife
-keep class butterknife.** { *; }
-keepnames class * { @butterknife.Bind *;}

-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

# rxjava
-keep class rx.schedulers.Schedulers {
    public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
    public <methods>;
}
-keep class rx.schedulers.TestScheduler {
    public <methods>;
}
-keep class rx.schedulers.Schedulers {
    public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    long producerNode;
    long consumerNode;
}

# Support library
-dontwarn android.support.**
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

# retrofit
-dontwarn okio.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

-dontwarn rx.**
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

-keep class sun.misc.Unsafe { *; }
#your package path where your gson models are stored
-keep class com.abc.model.** { *; }

# Keep these for GSON and Jackson
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.** { *; }
  
#keep otto
-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

# Crashlitycs 2.+
-keep class com.crashlytics.** { *; }
-keep class com.crashlytics.android.**
-keepattributes SourceFile, LineNumberTable, *Annotation*
# If you are using custom exceptions, add this line so that custom exception types are skipped during obfuscation:
-keep public class * extends java.lang.Exception
# For Fabric to properly de-obfuscate your crash reports, you need to remove this line from your ProGuard config:
# -printmapping mapping.txt

# Picasso
-dontwarn com.squareup.okhttp.** 

# Volley
-keep class com.android.volley.toolbox.ImageLoader { *; }

# OkHttp3
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

# Needed for Parcelable/SafeParcelable Creators to not get stripped
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

Aktivera ProGuard för din build

För att aktivera ProGuard konfigurationer för din applikation måste du aktivera den i din modulnivågradfil. du måste ställa in värdet på minifyEnabled true .

Du kan också aktivera shrinkResources true som tar bort resurser som ProGuard markerar som oanvända.

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

Ovanstående kod kommer att tillämpa dina ProGuard-konfigurationer som finns i proguard-rules.pro ("proguard-project.txt" i Eclipse) på din släppta apk.

För att du senare ska kunna bestämma den rad som ett undantag inträffade i en stapelspårning bör "proguard-rules.pro" innehålla följande rader:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

För att aktivera Proguard i Eclipse lägger du till proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt till "project.properties"

Ta bort spårloggning (och andra) uttalanden vid byggtiden

Om du vill ta bort samtal till vissa metoder, förutsatt att de återgår ogiltiga och inte har några sidoeffekter (som om, att ringa dem inte ändrar några systemvärden, referensargument, statistik etc.) kan du låta ProGuard ta bort dem från efter att byggandet är slutfört.

Till exempel tycker jag att detta är användbart när jag tar bort felsöknings- / ordboksloggar som är användbart vid felsökning, men det är onödigt att producera strängarna för dem.

# Remove the debug and verbose level Logging statements.
# That means the code to generate the arguments to these methods will also not be called.
# ONLY WORKS IF -dontoptimize IS _NOT_ USED in any ProGuard configs
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

Obs: Om -dontoptimize används i någon ProGuard-konfiguration så att den inte minifierar / tar bort oanvänd kod, kommer detta inte att rensa uttalandena. (Men vem skulle inte vilja ta bort oanvänd kod, eller hur?)

Obs2: detta samtal tar bort samtalet för att logga, men skyddar inte koden. Strängarna kommer faktiskt att förbli i den genererade apk. Läs mer i det här inlägget .

Skydda din kod från hackare

Förmörkelse betraktas ofta som en magisk lösning för kodskydd genom att göra din kod svårare att förstå om den någonsin blir avkompilerad av hackare.

Men om du funderar på att ta bort Log.x(..) faktiskt tar bort informationen som hackarna behöver, kommer du att få en otäck överraskning.

Ta bort alla dina loggsamtal med:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    ...etc
}

kommer verkligen att ta bort själva loggsamtalet, men vanligtvis inte de strängar du lägger in dem.

Om du till exempel skriver in ett vanligt Log.d(MyTag,"Score="+score); som: Log.d(MyTag,"Score="+score); , omvandlar kompilatorn + till en 'ny StringBuilder ()' utanför loggsamtalet. ProGuard ändrar inte det nya objektet.

Din de-kompilerad kod kommer fortfarande att ha en hängande StringBuilder för "Score=" , bifogas med förvanskad version för score variabel (låt oss säga att det omvandlades till b ).
Nu vet hackaren vad som är b , och gör känslan av din kod.

En bra praxis för att faktiskt ta bort dessa rester från din kod är att antingen inte lägga dem där i första hand (använd strängarformat istället, med proguardregler för att ta bort dem), eller att radera dina Log med:

    if (BuildConfig.DEBUG) {
        Log.d(TAG,".."+var);
    }

Dricks:

Testa hur väl skyddad din dolda kod är genom att ta bort den själv!

  1. dex2jar - konverterar apk till burk
  2. jd - dekompilerar burken och öppnar den i en gui-redaktör

Aktivera ProGuard med en anpassad obfusk-konfigurationsfil

ProGuard tillåter utvecklaren att fördunkla, krympa och optimera sin kod.

# 1 Det första steget i proceduren är att aktivera proguard på build .

Detta kan göras genom att ställa in kommandot 'minifyEnabled' till true på önskad build

# 2 Det andra steget är att specificera vilka proguardfiler vi använder för den givna builden

Detta kan göras genom att ställa in 'proguardFiles' -raden med rätt filnamn

buildTypes {
    debug {
        minifyEnabled false
    }
    testRelease {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-tests.pro'
    }
    productionRelease {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-tests.pro', 'proguard-rules-release.pro'
    }
}

# 3 Utvecklaren kan sedan redigera sin proguard-fil med de regler han önskar.

Det kan göras genom att redigera filen (till exempel 'proguard-rules-tests.pro') och lägga till önskade begränsningar. Följande fil fungerar som ett exempel på proguard-fil

// default & basic optimization configurations
-optimizationpasses 5
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-verbose

-dump obfuscation/class_files.txt
-printseeds obfuscation/seeds.txt
-printusage obfuscation/unused.txt // unused classes that are stripped out in the process
-printmapping obfuscation/mapping.txt // mapping file that shows the obfuscated names of the classes after proguad is applied

// the developer can specify keywords for the obfuscation (I myself use fruits for obfuscation names once in a while :-) )
-obfuscationdictionary obfuscation/keywords.txt
-classobfuscationdictionary obfuscation/keywords.txt
-packageobfuscationdictionary obfuscation/keywords.txt

Slutligen, när utvecklaren kör och / eller genererar sin nya .APK-fil, kommer de anpassade proguardkonfigurationerna att tillämpas och därmed uppfylla kraven.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow