1.aar包是不嵌套aar包的,所以当我的项目中引用了别人的aar,而我又需要向其他人提供我的aar的时候,就出现了aar嵌套,而aar是不包含aar包的,所以解决这个问题:
①我给客户提供我的aar和我引用的别人的aar。
②将别人的aar换成jar包的形式,即可以打进我的aar中提供给客户。
2.我是将别人给我的aar让他换成了jar的形式,然后放入我的工程中,混淆打成一个aar包提供给客户。
遇到的坑:
①混淆后java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses,多数情况下的原因是jar冲突,编译器在错误的jar包中没有找到对应的东西。我遇见的情况是代码混淆导致的,配置代码混淆后发现部分类里面是空的,客户的代码中调用的类找不到。经反编译后发现混淆后类中是空的,所以在proguard-rules.pro中配置了部分代码不混淆。
②找不到/system/lib64/libbacktrace_libc .so
定位是把jar包混淆了导致的,我debug版本没有混淆,release进行了混淆,发现两个版本的aar中debug的可以反编译看到我引用的jar包,而release的没有,尝试把引入的jar包防混一下,就解决了。
在proguard-rules.pro中配置类和jar包的防混方法:
//对com.xxx.xxx.xxx包的A类进行防混
-keep class com.xxx.xxx.xxx.A{*;}
//对jar包防混
-libraryjars libs/camera.jar
-dontwarn com.google.android.cameraview.**
-keep class com.google.android.cameraview.** {*; }