`
webdev2014
  • 浏览: 675426 次
文章分类
社区版块
存档分类
最新评论

Android项目proguard代码混淆遇到的一系列问题,外部jar,Gson包等

 
阅读更多

关于Android项目打包的问题就不再介绍了,下面说一下我混淆代码中出现的一系列问题和最后的解决。

开发,一路高歌的pass,最后阶段的混淆代码让我整个头大了一圈。note:我这里讲述的是代码混淆中遇到的问题和解题的思路。也希望大家看到后有好的思路给我指出。如果你还一点不了解Android工程的代码混淆,请先看看官方文档Develop/tools-help/monkeyrunner/proguard。遇到的问题主要有两个,一是外部工程作为jar包;二是使用了Gson解析包。

1、首先,这次开发,公司让写出一个Android项目框架,其实就是对于一些公用代码(数据加载、自定义视图、数据传递、页面显示、应用异常处理等等)的抽离封装。所以,使用外部工程作为底层框架jar包(如果不懂把项目工程作为jar包使用的方法,请参考:http://blog.csdn.net/wangduanqing5945/article/details/11606157)。大家都知道代码混淆时,如果有第三方jar包,需要在proguard.cfg文件里(一般文件叫这个名,当然了名字都是人取的,随你取)加入命令: -libraryjars 你jar包的路径,一般情况下,第三方jar都会在工程的libs下面,但是现在不一样了,现在我的jar包一般都在外部工程jar包的libs里面,那么怎么得到这个路径呢,一开始想的是使用绝对路径,当然是可以的。其实外部工程的libs路径也可以这样得到,../外部工程名/libs/你的jar包名,是滴,..不就是代表上一级目录嘛。这点小问题算是可以了。

2、第三方Gson包

混淆代码需要的添加的东西都添加上去后,哎,不错,打包成功,是不是就要成功了,小小的喜悦感。把打出来的签名包安装到手机上,我去,很多listView里都没有数据,这是什么情况,是不是出现什么异常了,看了一下log日志,也没出现什么异常日志,那就奇怪了,各种分析各种试,最后还是不行。这也没法debug,这可怎么办,再郁闷也不能解决问题,不能debug总能打印东西吧,把该打印的信息打印一下,发现,网络数据加载回来了,但是通过解析后数据就是空的了,这时才猛然间发现我为了偷懒,json数据的解析我用的是Gson,初步猜想,Gson是根据变量名来进行解析赋值的,那么是不是一混淆代码,对不上号了。那我不混淆Gson包的代码不就得了,当然你的javabean也不能混淆,原以为这样就行了,可是还是不行。会出现ClassCastException,是不是解析的还不对。然后看了一下Gson.jar包里,还有个META-INF文件夹,这个是什么配置信息吗,还是什么的不明白,然后在网上查了一下Gson的混淆,说加上-keepattributes Signature等等几句命令就OK了,首先我想搞明白是什么意思,其他命令我都删了,都是没用的,就这一句有用,而且都不用再去混淆Gson包

具体我的命令代码是这样

#保证Javabean不被混淆,下面的两个包都是存放Javabean的,因为我有两个工程(一个工程是jar,这里不叽歪)
-keep class com.jdsy.gdt.ui.entity.** { *;} 
-keep class com.jdsy.core.entity.** { *;}
#保持参数签名不被混淆,直译是这样,我也没弄明白是什么意思。
-keepattributes Signature
这样就能正常混淆了。那么-keepattributes Signature什么意思呢,我现在还没有搞明白,仔细对比了一下,有这个命令和没这个命令混淆出现的源码,也没有看出大的差别。如果有懂的望告之。其实在这个打包工程中,遇到的不止这几个问题,各种懵,各种试,费了不少工作,如果有遇到混淆代码出现问题的同仁可以找我,尽其所能。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics