利用 android studio 混淆打包时该注意的一些问题

**利用 android studio 混淆打包时该注意的一些问题**

针对混淆代码的时候,哪些可以混淆,哪些不能混淆,都是有一定规则的。昨天自己在打包混淆的时候,就困惑了很久,因为我项目中集成了百度地图的sdk,libs的导入直接拿到是demo中的,而百度官方文档上提到的是:
`矢量版SDK(即2.0.0及之后的版本):

如果是用proguard ,以下配置供参考:

-libraryjars libs/baidumapapi_v2_1_2.jar 替换成自己所用版本的jar包

-keep class com.baidu.** { *; }

-keep class vi.com.gdi.bgl.android.**{*;} `

自己项目的libs,没有baidumapapi_v2_1_2.jar,而是一些

这里写图片描述

因此,我尝试写成:-libraryjars libs/baidumapapi_base_v4_1_1.jar 这样子。
可在打包编译时就出问题了,studio里会提示:

   java.io.IOException: The same input jar [C:\Users\Administrator\AndroidStudioProjects\RO\app\libs\baidumapapi_base_v4_1_1.jar] is specified twice. 

意思就是说,已经指定了两次。为什么会说指定了两次呢,那是因为在gradle中,Google默认已经帮我们做了jar包的混淆忽略了,也就是说当我们再去用-libraryjars libs/xxxx.jar时,就会报重复指定了,去掉自己写的,问题解决。因此第三方jar包,不需要我们再去担心要不要混淆了。

第三方jar包问题解决,混淆打包也成功,而且程序进入到首页也没问题,正当我以为可以直接出包的时候,我点了点其他模块,程序崩溃了!!
由于一开始没有任何调试信息,自己也不知道问题在哪,刚开始还以为是百度地图sdk混淆还有问题,因此又继续去研究百度的官方文档。后来,自己加入了Crash收集代码,问题马上就暴露出来了。空指针异常!!
原因是我的代码里面有用到gosn,把response的内容转化为bean,这个过程要利用反射机制,而当我混淆代码后,反射就会因为找不到类名出问题了。因此,解决方法就很简单了,参考Google官方文档:

—————Begin: proguard configuration for Gson ———-
Gson uses generic type information stored in a class file when working with fields. Proguard
removes such information by default, so configure it to keep all of it.
-keepattributes Signature
For using GSON @Expose annotation
-keepattributes Annotation
Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.* { ; }
Application classes that will be serialized/deserialized over Gson
-keep class com.xxx.xxx.bean.* { ; }
—————End: proguard configuration for Gson ———-
把自己项目中的整个bean文件夹保留下来,不要混淆调,问题迎刃而解(以后,项目中有地方用到反射的地方,一定要记得不能混淆!)。

在代码混淆的时候,可能还有一种情况,就是会引用到第三方库,那么第三方库,在代码混淆的时候又该怎么做呢,据我个人了解,第三方库,自己可做配置也可以不做配置,对程序影响不大,只是在反编译出来会有不同。

最后,混淆打包,对于第三方jar包,第三方库,自己写的代码,要不要做混淆,上面都有做讲述。由于自己知识有限,可能有很多不当地方,还请大神们直接指出,后续更改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值