本地生成jar包,供给第三方引入使用,要求混淆一下代码。

使用proguard工具,遇到不少问题 记录一下,耗时两天混淆成功。


然后添加输入、输出,下方添加依赖包;在信息界面选择jdk 1.8

 

android proguard 混淆 proguard混淆jar包_java

 

 其他配置基本默认,开始混淆,最后错误提示如下:

android proguard 混淆 proguard混淆jar包_经验分享_02

出现一批警告,根据提示在配置文件加 (去掉警告)

-dontwarn

再次处理错误解决。经对比-dontwarn 对应Proguard工具界面操作,取消勾选如下红框

android proguard 混淆 proguard混淆jar包_java_03

插一句:最开始我也不知道怎么修改配置文件及加载,审核界面右下角可以查看配置及保存配置,将配置保存到本地,xx.pro   可以用文本打开 修改配置文件,然后在proguard首页右下角加载配置,选择xx.pro文件,根据内容界面会自动勾选。

将此混淆的jar在本地运行报错 

android proguard 混淆 proguard混淆jar包_java_04

一顿百度,意思是把依赖包也混淆了,后来就开始保持依赖包不太混淆,添加配置

-keep,allowshrinking class com.alibaba.** {
    <fields>;
    <methods>;
}

-keep,allowshrinking class xxx.** {
    <fields>;
    <methods>;
}

 {}里面就是参数、方法也保持不被混淆 ,对比Proguard界面操作

android proguard 混淆 proguard混淆jar包_jar_05

android proguard 混淆 proguard混淆jar包_proguard_06

 进行混淆 运行测试,还是报错,(记得也是报上面的错误)又是一顿度娘 一顿尝试,错误尝试就不贴了,意识到jar打的是不是有问题,然后又打了个不包含依赖包的版本

 

android proguard 混淆 proguard混淆jar包_proguard_07

重新输入jar包,第一次忘记在工具里引入依赖包了,如下

 

android proguard 混淆 proguard混淆jar包_android proguard 混淆_08

 虽然路走偏了,顺路了解了一下压缩操作,

 未添加依赖包,运行混淆后的jar包发现,代码少了很多,并且对父类方法的重写都失效了

android proguard 混淆 proguard混淆jar包_经验分享_09

 还是没意识到是没添加依赖包的问题,怀疑到了压缩的问题上了,

取消压缩

-dontshrink

 对应界面操作

android proguard 混淆 proguard混淆jar包_proguard_10

 取消压缩后,少的代码确实有了,但是继承父类的方法还是改名了,这是混淆的问题,也想过保持继承这一类的代码不被混淆,但是没找到统一的配置,一个一个加不太现实;

对了里面还遇到了内部类的混淆问题,com.xx.xx$.* 这样可以保持内部类不被混淆。

android proguard 混淆 proguard混淆jar包_经验分享_11

 后来了解到压缩是把没用到的代码忽略掉,才意识到每天挤依赖包,重新开始输入jar包(jar内没添加依赖包),在界面上引用依赖包,进行混淆,测试成功。

主要配置:

android proguard 混淆 proguard混淆jar包_proguard_12

 这样有个问题就是别人用这个混淆后的jar时,需要在本地项目引入jar所需的依赖包。

这个问题还没有找到好的解决方法,这样也算是混淆成功了,记录一下