android库工程jar打包和混淆

公司有个项目需要以库的形式提供给第三方使用,但是java代码又不想别人知道,还有资源文件也需要一起打包,很常见的需求,下面就是解决此事的过程。

1、直接将库工程提供给第三方,android库工程引用方式

被老板pass,代码客户都可以看到,不行。

2、将库工程TestLib的src导出成jar,把res目录直接发给第三方

失败。导出的jar依然是引用库工程的R文件(com.test.lib.R),但是资源提供给第三方后,生成的R为com.test.R,因此运行时找不到com.test.lib.R,引用资源报错。

3、新建一个库工程MyLib,包名和TestLib工程相同(com.test.lib),然后将MyLib的res删除,将TestLib的res全部复制到新工程,同时将TestLib中bin下生成的TestLib.jar复制到MyLib的libs文件夹下,然后第三方再引用MyLib,成功!

中间有个小插曲,我们没有使用bin下面生成的jar,二是类似第二部直接导入jar文件,其他和步骤三相同,但是运行时还是报错——知道的朋友希望告诉我为什么。

4、步骤三解决了java源码没有直接提供给第三方的问题,但是如果用jar查看器,还是可以看到源码,也就是步骤三生成的jar是没有混淆的,那么我们就要混淆jar了。


jar混淆相信步骤

4.1  找到sdk下面的混淆运行文件目录(*\android-sdk-windows\tools\proguard\bin),打开其中的proguardgui.bat;


4.2  出现如下画面,点击加载按钮,加载*\android-sdk-windows\tools\proguard\proguard-android-optimize.txt文件,点击next。

4.3 出现如下画面,点击红框所示三个按钮,分别选择要加密的jar,加密输出的jar,以及项目引用到的jar(android.jar)。点击下一步。


4.4 在下图中红框打勾,点击下一步;

4.5 一直点击下一步,直到出现如下画面,点击process:

4.6 ,就会出现如上日志,可以看到和R有关的都报错了,找不到R相关的内容,因为R在jar里面没有,那么我们之间忽略就可以了(dontwarn),因为我们要把mylib提供给第三方,可以获取到R相关内容,这也是第二种方法不能凑效的原因。如下图,我们打开proguard-android-optimize.txt,天津红框里面的2句话,忽略R相关的内容。


4.7 再次重复步骤2~6,出现下图:


4.8 找到我们设置的输出目录,我们就可以看到对应的*after文件了,我们用jar查看器打开看看,让老板放心,让码农恶心的混淆后的代码出来了,妈妈再也不用担心第三方知道我们的业务流程和接口了:



4.9 至此,任务完成。chenzhenlindx@gmail.com 欢迎交流。


参考资料:

1、Android代码jar打包Library项目整合
2、混淆Android JAR包的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值