Proguard 声称会混淆 .apk,但不会

Posted

技术标签:

【中文标题】Proguard 声称会混淆 .apk,但不会【英文标题】:Proguard claims to obfuscate the .apk, but does not 【发布时间】:2018-04-16 21:02:21 【问题描述】:

我正在从 Eclipse 中导出一个 android 应用程序。 Proguard 认为它根据控制台、dump.txt、mapping.txt、seeds.txt 和 usage.txt 输出混淆了 .apk,但是当我反编译 .apk 本身时,它没有被混淆。类和字段的名称是完整的。我尝试了各种不同的 Proguard 配置,但在配置方面似乎没有任何问题。我确保清理项目,以免 classes.dex 文件过时。

【问题讨论】:

请解释您的反对意见。到目前为止,除了阅读其他问题之外,唯一可行的解​​决方案(我还没有尝试过)是从 Eclipse 之外的命令行运行 Proguard。可笑... 您可能想要解释 (1) 当 Android 团队在 2 年多前弃用对该平台的支持时,您为什么要使用 Eclipse。 (2) 在 Android ant 构建系统中添加 proguard 是不可行的:***.com/questions/4629444/… 这是 Android 迁移到 gradle 的另一个原因。 Correction Proguard 曾经在 Eclipse/Ant 中可以实现,但所有较新的 Android 功能(如 multidex 和 AAR 支持)都在 Gradle 中。 【参考方案1】:

这在 Eclipse Neon 中对我有用:

    右键项目并添加 Gradle 性质

    文件 -> 导出 -> Android -> 生成 Gradle 构建文件

    在你项目的根目录下,创建一个local.properties文件并设置sdk.dir。见:Where does local.properties go for android project?

    右键项目-> Gradle -> 刷新Gradle项目

    在 build.gradle 中启用代码收缩。见:https://developer.android.com/studio/build/shrink-code.html

    将您的 Proguard 配置放入 proguard-rules.pro 中(或者如果您在 build.gradle 中相应地设置了 proguardFiles 属性,则放入不同的文件中)

    打开 Gradle 任务视图并运行 assembleRelease 任务。检查控制台是否运行成功。如果一切顺利,请刷新您的项目目录,.apk 文件将位于 build/outputs/apk 子目录中。

【讨论】:

以上是关于Proguard 声称会混淆 .apk,但不会的主要内容,如果未能解决你的问题,请参考以下文章

从 Android Studio 构建替代 buildType 时,ProGuard 不会混淆

Android Proguard混淆打包经验总结

Android Proguard - dontobfuscate 不会禁用混淆

使用 ProGuard 进行混淆时,-keepattributes SourceFile,LineNumberTable 是不是会使生成的 apk 更容易进行逆向工程?

Android ProGuard - 只有混淆

Android ProGuard - 只有混淆