Поиск…


Правила для некоторых из широко используемых библиотек

В настоящее время он содержит правила для следующих библиотек: -

  1. Нож для масла
  2. RxJava
  3. Библиотека поддержки Android
  4. Библиотека поддержки Android Design
  5. модифицировать
  6. Гссон и Джексон
  7. эфирное масло
  8. Crashlitycs
  9. Пикассо
  10. залп
  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;
}

Включите ProGuard для вашей сборки

Для включения конфигураций ProGuard для вашего приложения вам необходимо включить его в файл уровня градиента уровня модуля. вам нужно установить значение minifyEnabled true .

Вы также можете включить shrinkResources true который удалит ресурсы, которые флаг ProGuard не используется.

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

Вышеприведенный код применит ваши конфигурации ProGuard, содержащиеся в proguard-rules.pro («proguard-project.txt» в Eclipse), к вашему выпущенному apk.

Чтобы позднее определить строку, в которой произошла ошибка в трассировке стека, «proguard-rules.pro» должен содержать следующие строки:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

Чтобы включить Proguard в Eclipse, добавьте proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt в "project.properties"

Удаление протоколов трассировки (и других) во время сборки

Если вы хотите удалить вызовы на определенные методы, считая, что они возвращают void и не имеют побочных эффектов (так как в них их не изменяются никакие системные значения, ссылочные аргументы, статика и т. Д.), Тогда вы можете заставить ProGuard удалить их из после завершения сборки.

Например, я нахожу это полезным при удалении отладочных / подробных протоколирующих операторов, полезных при отладке, но генерация строк для них не требуется в производстве.

# 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(...);
}

Примечание. Если -dontoptimize используется в любой конфигурации ProGuard, чтобы он не уменьшал / удалял неиспользуемый код, тогда это не будет вытеснять утверждения. (Но кто не хочет удалять неиспользуемый код, не так ли?)

Примечание2: этот вызов удалит вызов в журнал, но не защитит ваш код. Строки фактически останутся в сгенерированном apk. Читайте больше в этом сообщении .

Защита вашего кода от хакеров

Обфускация часто рассматривается как волшебное решение для защиты кода, делая ваш код более сложным для понимания, если он когда-либо декомпилируется хакерами.

Но если вы думаете, что удаление Log.x(..) фактически удаляет информацию, необходимую хакерам, у вас будет неприятный сюрприз.

Удаление всех вызовов журнала с помощью:

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

действительно удалит сам вызов журнала, но обычно это не строки, которые вы вставляете в них.

Если, например, внутри вашего Log.d(MyTag,"Score="+score); вызова вы вводите общее сообщение журнала, например: Log.d(MyTag,"Score="+score); , компилятор преобразует символ + в новый StringBuilder () за пределами вызова журнала. ProGuard не изменяет этот новый объект.

У вашего скомпилированного кода по-прежнему будет висячий StringBuilder для "Score=" , добавленный с запутанной версией для переменной score (предположим, что она была преобразована в b ).
Теперь хакер знает, что такое b , и понимает ваш код.

Хорошая практика, чтобы фактически удалить эти остатки из вашего кода, либо не помещает их туда в первую очередь (вместо этого используйте вместо этого форматирование String, с правилами proguard для их удаления) или для переноса ваших вызовов Log с помощью:

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

Совет:

Проверьте, насколько хорошо защищен ваш запутанный код, де-компилируя его самостоятельно!

  1. dex2jar - преобразует apk в jar
  2. jd - декомпилирует банку и открывает ее в редакторе gui

Включение ProGuard с помощью настраиваемого файла конфигурации обфускации

ProGuard позволяет разработчику запутывать, сжимать и оптимизировать свой код.

# 1 Первым шагом процедуры является включение proguard в сборку .

Это можно сделать, установив команду «minifyEnabled» в true на нужную сборку

# 2 Второй шаг - указать, какие файлы proguard мы используем для данной сборки

Это можно сделать, установив строку 'proguardFiles' с правильными именами файлов

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 Затем разработчик может редактировать свой файл proguard с правилами, которые он желает.

Это можно сделать, отредактировав файл (например, «proguard-rules-tests.pro») и добавив нужные ограничения. Следующий файл служит примером файла proguard

// 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

Наконец, всякий раз, когда разработчик запускает и / или генерирует свой новый .APK-файл, будут применены настраиваемые конфигурации proguard, выполняя таким образом требования.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow