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


http://blog.163.com/android_robot/blog/static/211625311201282181832687/

http://blog.163.com/android_robot/blog/static/211625311201282181832687/

http://blog.163.com/android_robot/blog/static/211625311201282181832687/

http://blog.163.com/android_robot/blog/static/211625311201282181832687/






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

2012-09-21 20:26:26|  分类: 错误收集 |  标签:问题  |举报|字号 订阅

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

Android 编程下引入第三方jar包进行代码混淆时的问题解决 - 安卓机器人 - 安卓机器人

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

Android 编程下引入第三方jar包进行代码混淆时的问题解决 - 安卓机器人 - 安卓机器人
 
出现此错误提示是因为使用了 Proguard 代码混淆器,同时在项目中引用了第三方 jar 包,但却没有在 Proguard 的配置文件中标明引用了的 jar 包所致。解决方法如下:
  • 在项目的目录下找到 proguard-project.txt 文件,将其打开后在任一空行中使用 -libraryjars 标明所有引用的第三方 jar 包。如下图所示:

Android 编程下引入第三方jar包进行代码混淆时的问题解决 - 安卓机器人 - 安卓机器人

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

Android 编程下引入第三方jar包进行代码混淆时的问题解决 - 安卓机器人 - 安卓机器人
 
【注意】使用  -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 包真实路径如下图所示:

Android 编程下引入第三方jar包进行代码混淆时的问题解决 - 安卓机器人 - 安卓机器人
 
  按照解决方法进行操作后即可将混淆后的 APK 文件进行导出,以下截图是将导出的 APK 文件反编译后看到的代码混淆效果:

Android 编程下引入第三方jar包进行代码混淆时的问题解决 - 安卓机器人 - 安卓机器人
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值