关于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什么意思呢,我现在还没有搞明白,仔细对比了一下,有这个命令和没这个命令混淆出现的源码,也没有看出大的差别。如果有懂的望告之。其实在这个打包工程中,遇到的不止这几个问题,各种懵,各种试,费了不少工作,如果有遇到混淆代码出现问题的同仁可以找我,尽其所能。
分享到:
相关推荐
实现maven管理的Javaweb项目的proguard代码混淆功能、工具包下载及错误解决
android proguard5.3.3混淆包 替换Jar包以后使 混淆的类名方法名变成空白 使用方法 直接 替换 5.3.3版本的 混淆jar包 Mac 路径为 Contents/gradle/m2repository/net/sf/proguard/proguard-base Win gradle/m2...
J2EE-web工程ProGuard代码混淆
其中包括第三方jar混淆报错及解决办法,以及普通的代码混淆办法,相信能给你帮助
proguard最新版jar包混淆工具,能使部署的jar包不让对方破解
本实例使用的是把web项目中的源码(src)所有文件打包成jar文件,使用proguard混淆后再把jar文件以及jar解压后的混淆class类文件替换原war项目的相应位置即可。 混淆过程中需要使用keep参数来保持原有一些属性、注解...
如何混淆Android项目代码(ProGuard)防止反编译.rar
Android 2_3 代码混淆proguard技术介绍 - Zy的技术心
proguard混淆打包工具proguard混淆打包工具proguard混淆打包工具
ProGuard 是一个混淆代码的开源项目,它的主要作用是混淆代码,ProGuard 包括以下 4 个功能: 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute) 优化(Optimize):对字节码进行优化,移除无用...
新写的proguard代码混淆的文档 大家可以看看
Java Jar包混淆器proguard.v3.8 双击proguardgui.jar运行
android-proguard-snippets, 通用Android库的混淆器配置 android-proguard-...这个项目假设你的混淆器配置是基于最新的官方 proguard-android.txt 配置,如下所示。 每个库配置应该仅仅是特定库所需的规则,而不是完
WEB Maven 项目 ProGuard 混淆方案 POM文件,包含详细混淆注释 具体请参考博客: http://blog.csdn.net/wltj920/article/details/48970869#comments
Android Java代码混淆工具:ProGuard简介及使用.docx
自己写的proguard4.7代码混淆器使用详细说明,之前在网上找了一大堆都还是不会用,或不全,研究了一天,终于达到自己想要的结果,在此总结下,写成文档,一边以后需要,也供大家学习学习,工具包就不上传了,网上一...
java代码混淆器proGuard,可以混淆函数变量、类、方法名以实现代码加密
一步步教你使用Proguard混淆Java源代码 .docx
ProGuard混淆与dex2jar反编译工具