【问题标题】:How to tell if Proguard has done its job如何判断 Proguard 是否完成了它的工作
【发布时间】:2012-04-28 18:33:54
【问题描述】:

我下载了封装在一个 zip 文件中的 proguard 并将其解压到我的硬盘上。我没有以任何方式安装它(因为我不知道如何安装)。然后我将proguard.config=proguard.cfg 添加到我的project.properties 文件中。然后我做了一个“导出android应用程序”,完全期待eclipse抱怨它不知道我的proguard安装在哪里,但没有抱怨。实际上,我的密钥库中出现了一个新的 apk 文件,并且我的应用程序的 proguard 子目录中出现了一组文件(dump.txt 等)。 mapping.txt 看起来像是从我的长变量名到一个和两个字母变量的一个很好的映射列表。这应该都是 proguard 以某种方式起作用的有力证据——我唯一担心的是 apk 几乎没有比以前小了。有什么方法可以检查 apk 是否包含 proguard 的混淆?

【问题讨论】:

    标签: java android eclipse


    【解决方案1】:

    通常大小会指示 ProGuard 是否有效,但您可以:-

    1. 使用Dex2Jar将apk转成jar文件
    2. 使用Jd-Gui 打开生成的 Jar 文件以查看其中包含的代码

    【讨论】:

    • 对于 mac osx,brew install dex2jar,然后 /usr/local/Cellar/dex2jar/2.0/bin/d2j-dex2jar 在您的 classes.dex 文件上运行它。将您的 apk 文件重命名为 .zip 扩展名,然后解压缩并 cd 到文件夹中,那里应该有一个 classes.dex 文件,您可以在其中运行 dex2jar。
    【解决方案2】:

    @Kuffs 方法的替代方法是将您的新 APK 与旧 APK 进行比较。打开它们(使用 7zip 或您喜欢的工具)并比较它们中的 classes.dex 文件的大小。

    您可能看不到尺寸节省很多的几个简单原因:

    • 未混淆的 classes.dex 能够比经过混淆的类压缩得更多。这在某种程度上总是正确的。
    • 您没有进行发布构建。 Proguard 只能在发布版本上运行,因为调试混淆代码是一场噩梦。
    • 您使用的 Proguard 设置对您的项目没有多大好处(至少在代码大小方面)。之前我其实已经看到proguard的代码内联设置增加了jar文件的大小!

    【讨论】:

    • 未混淆的 classes.dex 能够比混淆的压缩更多 -> 这是否意味着未混淆的 classes.dex 的大小比混淆的要小?
    • @Rendy 我总是希望经过混淆的 .dex 的大小比未混淆的要小。但是,我也希望压缩后的大小差异会比压缩前的大小差异小得多。这是因为混淆的工作与压缩相同 - 即用更短的字符串替换长字符串(类/方法/字段名称)。
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2017-12-12
    • 2012-05-15
    • 2017-02-16
    相关资源
    最近更新 更多