为什么Proguard不会混淆我的代码?

时间:2017-12-13 12:07:21

标签: android proguard android-proguard

当我构建应用程序Proguard运行的发布版本时,但是在使用APK分析器查看APK时,一切都是可读的,显然没有应用混淆。

我的目的是对APK进行模糊处理,使逆向工程变得更加困难。

Gradle:

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

Proguard肯定正在运行,因为我可以在Gradle控制台中看到它。

proguard-rules.pro:

-dontshrink
-dontoptimize

-keep class com.squareup.picasso.** { *; }
-dontwarn com.squareup.picasso.**

-keep class com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

-keep class kotlin.reflect.** { *; }
-dontwarn kotlin.reflect.**

-keep class javax.annotation.** { *; }
-dontwarn javax.annotation.**

-keep class org.codehaus.mojo.** { *; }
-dontwarn org.codehaus.mojo.**

Proguard文档说混淆默认运行。文档还说保持语句中指定的类不会被混淆,但是应用程序本身中的类没有在keep语句中指定,但仍然没有被混淆。

进一步看,build文件夹中有一个名为aapt_rules.txt的文件,其中包含应用程序中每个类的keep语句。我不明白为什么会这样。

如何重新配置​​Proguard以使其混淆我的应用程序(而不是库)中的所有代码,而不缩小或删除任何类?

1 个答案:

答案 0 :(得分:0)

查看第keep class com.squareup.picasso.** { *; }行和-keep class com.squareup.okhttp.** { *; }

您不会混淆任何属于上述软件包或子软件包的内容。

Progaurd会混淆任何不属于上述包和子包的内容。

你是否在这些包之外上课。