用Android studio自定义jar包并混淆时可能遇到的问题

有的时候我们需要将自己写的java源码打包成jar给别人用,具体的打包流程这篇文章不说了,网上一大堆的文章,大同小异。也可以参考这篇比较low的文章:

http://blog.csdn.net/builder_taoge/article/details/70170590

今天想说的是如何给jar里的源码进行混淆以及主要在混淆中遇到的个别你可能没有想到过的奇葩问题。混淆jar包和混淆apk几乎无异,都是配置build.gradle和proguard-rules.pro文件,你在打包之前就配置好,然后执行打包命令就OK了,混淆的jar就成功出现了,也就是这篇文章和上面那个连接其实可以合并:

1.假设你已经写完了要打jar包的java代码,开始混淆并打包。此时你可以先配置你这module中的proguard-rules.pro文件,网上有太多不同的配置模式,应该都是可以的。你可以参照Android studio的sdk安装目录下tools\progurad\目录下的几个文件,按照你需要的添加。

图1.

其中必须的应该是jdk安装目录下\jre\lib\rt.jar和sdk安装目录下的android.jar以及你的java代码:

图2.

你想要打包以及混淆的java代码必须用-keep以及-keepxxx命令选择留下,否则最终的jar包里没有这些代码,将会是一个空jar,具体的keep命令参照官方文档的说明吧。图3是基本的配置:用 <包名>.*{...}的格式加上里面那两句配置就是要保留你的公共字段和方法。

图3.

2.proguard-rules.pro配置好以后,就可以去配置这个模块(不是整个项目)的build.gradle文件了(在文件最末尾的位置添加就可以了):

图4.

3.配置完之后就是执行生成jar的命令了,同样是两种方式:

<1>在Android studio自带的命令行执行gradlew makeJar命令就可以,注意是该项目根目录下,一般打开命令行默认就是这个目录。

<2>打开Android studio右面面板的Gradle面板,选择你的jar包所在模块\Takes\other\makeJar命令双击也OK。

最终在相应目录下生成的jar文件里,自定义的字段和方法名都被换成了a,b,c,d等字母。


遇到的一些问题:

①执行编译的命令以后编译失败,有类似的报错:

图5.

用黄线画圈的地方,显示的是几个乱码,而且给出了提示,是在proguard-rules.pro文件的第49行,但是我找到指定的位置以后,并没有发现这样的字符。后来想起来,我这个配置文件中的内容是从网上拷贝的,当时拷到Android studio中,原文空格的地方在这里都是红色"~~"的形式,我是一个个删除的。但是这行的末尾也有空格且没有红色的~~提示,所以就没看到。我把光标放在这一样,果然发现有两个空格,然后将空格删除再编译,就OK了。晕,这种问题太隐蔽了,没有经历过还真不好找。这种问题不知适用于本文,如果以后你在网页上复制内容直接贴到Android studio中,一定注意这个问题。

②空jar的问题

图6.

如图6中,错误提示是你的jar的输出路径下是一个空jar,并没有生成实际的jar包,是否添加了-keep选项,来保留你的java代码,也就是图3中所说。你可以回到配置文件中看看是不是你所想要保留的java代码没有keep,而keep那些都是你的代码中没有的。因为官方的那些配置是所有的情况列表,都添上的话不会遗漏,但是实际上你并不需都复制上,按照你自己的实际情况添加就OK,你必须要根绝那个规范定义自己的keep等options,主要还是理解原理吧,活学活用,不要完全的拷贝。


猜你喜欢

转载自blog.csdn.net/Builder_Taoge/article/details/73207557
今日推荐