如何通过 Eclipse 使用 Proguard 混淆 apk?
Posted
技术标签:
【中文标题】如何通过 Eclipse 使用 Proguard 混淆 apk?【英文标题】:How to obfuscate an apk with Proguard through Eclipse? 【发布时间】: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 【参考方案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 被混淆了。以上是关于如何通过 Eclipse 使用 Proguard 混淆 apk?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Eclipse + Proguard“运行”导出的 Android 应用程序?
如何在 Eclipse 和调试模式下使用 proguard?
如何在 Eclipse 中使用 Proguard 混淆 Android 库(.jar 文件)
Android Proguard:如何在 Eclipse 中设置?