关于Android项目混淆遇到的问题
2014-07-05 13:29
876 查看
昨天晚上客户端APP新版本上线,就在准备打包新版本apk后,安装完登录后发现总是会出现crash的情况,但是使用Eclipse直接部署到手机上却没有这个问题,然后开始顺着crash的报错寻找问题的根源,报错信息是java.lang.ExceptionInInitializerError这是最上面的报错,指向位置是org.eclipse.paho.android.service.n.a才发现这是由于项目代码被混淆的缘故,所以没办法准确定位错误的位置,下面还有具体的报错信息是Cause by:java.util.MissingResourceExcepiton:Error
locating the logging class了解到大概是由于丢失了文件导致的,但是具体原因还不清楚。
接下来开始着手寻找问题的根源:
1、首先,当前项目中包含多个jar文件,想百度定位,百度统计,支付宝支付,这些文件都没有问题,因为都是jar的形式,不存在找不到资源的问题
2、其次,当前项目中包含了多个类库项目,有下拉刷新lib项目、支付宝的类库项目、再就是当前这个mqtt的类库项目
3、因为其他的类库项目也都没有找不到资源的问题,所以开始看看如果不混淆能不能解决问题
暂时不混淆我的做法开始是直接把proguard-project.txt中所有的混淆策略都使用#注释掉了,心想这样总可以了吧,但是事实是当我在打包apk时会爆出混淆报错的问题,打包失败,然后开始仔细研究关于混淆的代码,发现project.properties文件中也引用了proguard-project.txt的文件,于是我又把project.properties中的proguard.config所在行注释掉,再次打包成功,由此我证明了,注释掉proguard-project.txt中的所有混淆策略并不能解决混淆的问题,并且证明了之前的java.util.MissingResourceException的报错是由于混淆引起的
解决混淆策略:
然后开始研究proguard-project.txt中的混淆策略,由于之前对于混淆也不是特别的了解,然后发现其中有一行代码
-keep public class * extends android.app.Activity
百度了一下android 混淆中keep的用法,发现keep的代码是不会混淆的,并且看到
-keep public class org.eclipse.paho.**{*;}的用法可以让某个包下的所有代码及其方法都不被混淆,然后这样修改后再次打包apk能正常运行
事实证明,如果打开了Android代码混淆的开关,则默认会把全部的代码都进行混淆,如果想某些代码不混淆,则需要加入混淆策略中
另外一个混淆和不混淆的直观差别是混淆后打包的apk比不混淆的apk要小很多,混淆前2.2兆左右的apk混淆后大约1.77兆!
locating the logging class了解到大概是由于丢失了文件导致的,但是具体原因还不清楚。
接下来开始着手寻找问题的根源:
1、首先,当前项目中包含多个jar文件,想百度定位,百度统计,支付宝支付,这些文件都没有问题,因为都是jar的形式,不存在找不到资源的问题
2、其次,当前项目中包含了多个类库项目,有下拉刷新lib项目、支付宝的类库项目、再就是当前这个mqtt的类库项目
3、因为其他的类库项目也都没有找不到资源的问题,所以开始看看如果不混淆能不能解决问题
暂时不混淆我的做法开始是直接把proguard-project.txt中所有的混淆策略都使用#注释掉了,心想这样总可以了吧,但是事实是当我在打包apk时会爆出混淆报错的问题,打包失败,然后开始仔细研究关于混淆的代码,发现project.properties文件中也引用了proguard-project.txt的文件,于是我又把project.properties中的proguard.config所在行注释掉,再次打包成功,由此我证明了,注释掉proguard-project.txt中的所有混淆策略并不能解决混淆的问题,并且证明了之前的java.util.MissingResourceException的报错是由于混淆引起的
解决混淆策略:
然后开始研究proguard-project.txt中的混淆策略,由于之前对于混淆也不是特别的了解,然后发现其中有一行代码
-keep public class * extends android.app.Activity
百度了一下android 混淆中keep的用法,发现keep的代码是不会混淆的,并且看到
-keep public class org.eclipse.paho.**{*;}的用法可以让某个包下的所有代码及其方法都不被混淆,然后这样修改后再次打包apk能正常运行
事实证明,如果打开了Android代码混淆的开关,则默认会把全部的代码都进行混淆,如果想某些代码不混淆,则需要加入混淆策略中
另外一个混淆和不混淆的直观差别是混淆后打包的apk比不混淆的apk要小很多,混淆前2.2兆左右的apk混淆后大约1.77兆!
相关文章推荐
- android项目中的遇到的关于system image的问题
- Android项目proguard代码混淆遇到的一系列问题,外部jar,Gson包等
- Android项目proguard代码混淆遇到的一系列问题,外部jar,Gson包等
- 关于Android开发导入已有项目遇到Project has no default.properties file! Edit the project properties to set one.问题的解决方法
- 关于Jenkins使用Gradle对android项目打包遇到的问题总结
- 关于将android项目打成Jar包时遇到的问题
- 【android】关于getBaseContext();this等-----项目中遇到的问题
- 通过SVN导入两个项目(从java移植到andorid)时,一个android,一个普通java项目时可能遇到的两个问题
- Android项目源码混淆问题解决方法
- android关于用真机测试遇到的问题
- Android项目源码混淆问题解决方法
- 做项目时遇到的几个关于C#和SQL的细节问题(一)
- [转]Android项目源码混淆问题解决方法
- 7-8月android项目遇到的问题总结(待详细完善)
- Android项目实战_新浪微博客户端开发过程中遇到的问题及解决办法01
- Android项目源码混淆问题解决方法
- 关于Android Socket编程遇到的问题
- Android项目源码混淆问题解决方法
- [一般问题] android导入项目中遇到的一些问题及解决方法
- 使用eclipse+git插件开发android项目时遇到的问题及解决