Android 编程下引入第三方jar包进行代码混淆时的问题解决

来源:互联网 发布:改图片大小的软件 编辑:程序博客网 时间:2024/05/21 15:40

许多安卓开发者在完成 Android 项目后,启用代码混淆功能并且尝试导出签名的 APK 安装包时经常会遇到 "Proguard returned with error code 1. See console" 的弹窗提示,如下图所示:


同时在查看控制台的时候也会发现 “You may need to specify additional library jars (using '-libraryjars').” 的报错提示,如下图所示:


出现此错误提示是因为使用了 Proguard 代码混淆器,同时在项目中引用了第三方 jar 包,但却没有在 Proguard 的配置文件中标明引用了的 jar 包所致。解决方法如下:

在项目的目录下找到 proguard-project.txt 文件,将其打开后在任一空行中使用-libraryjars 标明所有引用的第三方 jar 包。如下图所示:



然后在 project.properties 文件的空白行加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 即可进行代码混淆的文件导出,配置信息如下图所示:



【注意】使用 -libraryjars 标明引用的第三方 jar 包时需要填写正确的相对路径,如果按照形如 (-libraryjars activation.jar)的格式进行标明,则控制台中会报类似如下的错误:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[2012-09-21 20:51:06 - SMSReceiver] Proguard returned with error code 1. See console
[2012-09-21 20:51:06 - SMSReceiver] java.io.IOException: Can't read [D:\workspace\SMSReceiver\activation.jar] (No such file or directory)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.InputReader.readInput(InputReader.java:230)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.InputReader.readInput(InputReader.java:200)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.InputReader.readInput(InputReader.java:178)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.InputReader.execute(InputReader.java:100)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.ProGuard.readInput(ProGuard.java:196)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.ProGuard.execute(ProGuard.java:78)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.ProGuard.main(ProGuard.java:492)
[2012-09-21 20:51:06 - SMSReceiver] Caused by: java.io.IOException: No such file or directory
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:50)
[2012-09-21 20:51:06 - SMSReceiver]     at proguard.InputReader.readInput(InputReader.java:226)
[2012-09-21 20:51:06 - SMSReceiver]     ... 6 more
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
仔细看这里的报错 Can't read [D:\workspace\SMSReceiver\activation.jar],从这句报错中我们可以发现进行代码混淆的过程中程序会去D:\workspace\SMSReceiver\目录下寻找名为activation.jar
的第三方 jar 包,但是这些第三方 jar 包的真实路径却是在我们自己在将 jar 包引入的过程中新建的 lib 目录中,也就是说,我们在标明第三方 jar 包的时候需要在包名前添加 lib 目录,这样程序才能找到相应的资源。第三方 jar 包真实路径如下图所示:


 按照解决方法进行操作后即可将混淆后的 APK 文件进行导出,以下截图是将导出的 APK 文件反编译后看到的代码混淆效果:

6


原创粉丝点击