AndroidStudio混淆打包Library需要注意的问题

前言

这两天都在弄将一个module工程混淆打包成jar包,我的天啊,真是各种错误,网上的混淆打包的重复无用的太多了,再此,我需要做一个整理,感觉有点小崩溃…

需要注意的问题有:

1.项目中是否引用有第三方的jar包??
2.项目中的匿名内部类一般是不需要混淆的,混淆后会找不到
3.一个jar包,需要把一些公用的接口留出来供其他开发者调用
******************************我是可爱的分割线******************************
在经过我的反复测试中得出了这么一个结论,当我们继承android或者java里的某一个类的时候,会实现里面的一些方法,然后在混淆的时候,那些方法是不能混淆的,一旦混淆就会影响我们实际的jar包的运行结果,下面,以自定义的view来解释一下

##keepclassmembers 运行不显示
#keepclassmembernames 运行不显示
#keepclasseswithmembers 可以
#keepclasseswithmembernames 运行不显示
#keepnames 运行不显示
#keepattributes 编译报错
#keepdirectories 编译报错
#keepparameternames 编译报错
#keeppackagenames 编译报错
-keepclasseswithmembers public class com.xx.ads.view.TestView{
   protected void onCreate(android.os.Bundle);
}

说明:TestView是实现了android里的Dialog类,所以onCreate方法是不能混淆的,但是如果像这样的话,其实我们的类名还是会暴露出去的,但是还是有个小小的解决方法的,就是把包名和类名改成abc这样的,不过跟老大反应过这个事情后,老大表示不需要那样,所以我就不再做手动混淆这一项了,如果你有什么好的建议或者想法,欢迎分享,谢谢

附加:

打包出现的异常

异常1
Unexpected error while performing partial evaluation:
Class = [com/xxx/xxx/view/Test]
Method = [initView()V]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/Exception] (with 3 known super classes) and [com/xxx/xxx/view/TestView] (with 1 known super classes))

分析: 谷歌翻译: 找不到常用的超类[java / lang / Exception](有3个已知的超类)和[com/xxx/xxx/view/TestView](包含1个已知的超类)

解决: 经过我的反复测试,终于知道问题出在哪里了,我在工程的那个类里用了另一个类的匿名内部类接口,没有keep,所以是找不到了,所以这个时候,你要么直接写清楚保持匿名内部类要么保持这个类,保持该类下的所有的匿名内部类参考如下:
-keepnames class com.xxx.xxx.xxx.TestView$ClickListenerInterface{
public ;
public ;
}
说明:ClickListenerInterface 就是TestView里的一个接口的名称

异常2

Execution failed for task ':feeker_moads:makeJar'.> java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options?

分析: 谷歌翻译: 任务’执行失败::feeker_moads:makeJar’。> java.io.IOException:输出jar为空。 您指定了正确的“-keep”选项吗?

解决: 还没解决,如果想输出,那么就必须keep匹配到各个包下的类,然后jar包里才有内容,具体的原因现在还不清楚,但是我混淆就是不希望能清楚哪个类是哪个类,所以这样也是有问题的

猜你喜欢

转载自blog.csdn.net/liuwanyouyue/article/details/62887111