公司有个项目需要以库的形式提供给第三方使用,但是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包的方法

更多相关文章

  1. android JNI的使用示例详解
  2. android代码混淆压缩、资源压缩全解析
  3. android高手之路--删除工程里面无用的代码和资源
  4. Android(安卓)源码通过makefile配置文件对系统APP进行代码混淆
  5. 3g门户 &go桌面--2014届--广州--Android研发工程师(笔试、1、2面
  6. android 点击链接进入APP二级页面,不管APP是否处于打开状态
  7. Android混淆遇到的坑
  8. android studio 的自动添加依赖过程简介(适用于android studio 任
  9. Android(安卓)Studio 导入第三方库

随机推荐

  1. curl扩展与composer
  2. 如何对接口参数的描述进行集中管理
  3. 服务器如何有效防御DDOS攻击?可以配置香港
  4. 使用curl请求聚合数据的驾考宝典题库接口
  5. SSR 技术概述
  6. 你知道 JavaScript 中的 Arguments 对象
  7. 从0开始搭建云服务器,入门使用教程,搭建个
  8. Docker 系列 _ 01_ 一念缘起
  9. 接口管理进阶-环境变量的使用
  10. 【外贸建站规则】外贸网站建站流程有哪些