【问题标题】:Why is Proguard not obfuscating my code?为什么 Proguard 不混淆我的代码?
【发布时间】:2017-12-13 12:07:20
【问题描述】:

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

我的意图是对 APK 进行混淆处理,以使逆向工程更加困难。

Gradle:

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

正如我在 Gradle 控制台中看到的那样,Proguard 肯定正在运行。

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语句中指定的类不会被混淆,但应用程序本身的类没有在keep语句中指定,但仍然没有被混淆。

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

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

【问题讨论】:

    标签: android proguard android-proguard


    【解决方案1】:

    通过查看keep class com.squareup.picasso.** { *; }-keep class com.squareup.okhttp.** { *; }这一行,

    您不会混淆上述包或子包中的任何内容。

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

    你有这些包之外的课程吗?

    【讨论】:

    • proguard-rules.pro中keep语句中的所有类都是项目使用的库类。需要混淆的是项目代码本身,该文件中没有提及。
    • 能分享一下proguard_seed.txt文件和proguard_map.txt吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多