【问题标题】:How to obfuscate an apk with Proguard through Eclipse?如何通过 Eclipse 使用 Proguard 混淆 apk?
【发布时间】:2011-06-16 10:56:00
【问题描述】:

我在我的 default.properties 文件中添加了proguard.config=proguard.cfg,并在我的项目根目录中有一个 proguard.cfg 文件。如果我现在在 Eclipse 中使用 Export as Android Application,我会收到以下错误:

[2011-01-27 11:11:37 - Application] Warning: class [classes/com/package.Class.class] unexpectedly contains class [com/package.Class]
[2011-01-27 11:11:37 - Application] Warning: class [classes/com/package.Class2.class] unexpectedly contains class [com/package.Class2]
[2011-01-27 11:11:37 - Application] Note: there were 145 duplicate class definitions.
[2011-01-27 11:11:37 - Application] Warning: there were 146 classes in incorrectly named files.
[2011-01-27 11:11:37 - Application]          You should make sure all file names correspond to their class names.
[2011-01-27 11:11:37 - Application]          The directory hierarchies must correspond to the package hierarchies.
[2011-01-27 11:11:37 - Application]          If you don't mind the mentioned classes not being written out,
[2011-01-27 11:11:37 - Application]          you could try your luck using the '-ignorewarnings' option.
[2011-01-27 11:11:37 - Application] java.io.IOException: Please correct the above warnings first.
[2011-01-27 11:11:37 - Application]     at proguard.InputReader.execute(InputReader.java:133)
[2011-01-27 11:11:37 - Application]     at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-01-27 11:11:37 - Application]     at proguard.ProGuard.execute(ProGuard.java:78)
[2011-01-27 11:11:37 - Application]     at proguard.ProGuard.main(ProGuard.java:499)

似乎我的类以某种方式保存在类子文件夹中,但 Proguard 将此类子文件夹用作包。因此,Proguard 无法理解类的定义。

这是我的 SDK 设置的问题吗?还是我的 Proguard 配置中有错误导致了这个问题?

【问题讨论】:

  • 你需要发布你的 proguard.cfg

标签: android eclipse proguard


【解决方案1】:

我在去年 5 月对 proguard.cfg 进行了一些更改,现在它可以正常工作了:

来自

-injars bin

-injars bin/classes

我还必须清理一点——删除 Junit(本项目中没有使用)和兼容性库(我可能本可以忽略,但选择完全放弃)。

【讨论】:

    【解决方案2】:

    现在很方便,我刚刚更新到新的 ddms Eclipse 插件版本:Android DDMS 9.0.0.v201101191456-93220 并将我的 SDK 更新到包含 Honeycomb 的新版本,问题似乎消失了。

    【讨论】:

    • 现在你已经导出了它,你真的可以在模拟器以外的设备上运行 apk 吗?我正在考虑升级到 3.0,但发行说明说 apk 只能在模拟器上运行。
    • 我不使用 sdk 编译蜂窝,因此我的应用程序肯定可以在普通设备上运行。
    • 我只能通过命令行集成proguard和ant的使用;如果可以导出一个经过保护的 android 应用程序并跳过命令行,那么我很兴奋......
    【解决方案3】:

    获取混淆apk的步骤:

    1) 从“http://sourceforge.net/projects/proguard/files/”下载最新的proguard。当前最新版本是proguard4.7

    2) 将“C:\Program Files (x86)\Android\android-sdk\tools\proguard”的“bin”和“lib”文件夹替换为最新下载的proguard文件夹。

    3) 检查 Eclipse 中的 SDK 位置是否有空格,然后转到窗口 > 首选项 > Android。如果有空格,则将其替换为:

        c:\Progra~2\android\android-sdk (for windows 64-bit)
        c:\Progra~1\android\android-sdk (for windows 32-bit)
    

    4) 检查 proguard.cfg 文件是否在您项目的根文件夹中,并在 android 项目的 project.properties 文件中添加“proguard.config=proguard.cfg”。

    5) 现在导出您的项目以获取混淆 apk。

    我希望它会有所帮助。

    【讨论】:

    • 在步骤 4) 检查 proguard.cfg 文件是否在项目的根文件夹中。你能解释一下,这个文件到底放在哪里?还有,如何知道项目是否被正确混淆了?
    • 我找不到任何 proguard.cfg 并且我找到了 proguard-project.txt
    • @Shrikant 您可以通过文件大小验证混淆的 apk,如果您在项目资源管理器的 progurad 文件夹中看到这些文件(dump.txt、mapping.txt、seeds.txt、usage.txt)意味着你可以说你的 apk 被混淆了。
    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多