Android之aar包中R文件混淆问题

问题提出

解决问题要对症下药,先看报错日志:

    java.lang.NoSuchFieldError: No static field a of type I in class Lcom/**/**/**/R$layout; or its superclasses (declaration of 'com.**.**.R$layout' appears in /data/app/com.**.**-llnGcHCQ3Er78p3bU2UPnQ==/base.apk)

No static field a,这个field来自于我编译的AAR包,这是什么原因导致的呢?

问题分析

咋一看怎么会找不到布局的id,难道是哪个support库的版本跟主项目冲突了吗?验证了一下,还是报错。

咋回事呢?细心观察一下,这个field a,看起来像是混淆过的,难道是R文件中的属性被混淆了,导致找不到对应id了?正好报错的是release版本AAR包,于是又用debug版本的AAR包验证了下,没有问题。
于是问题原因基本确定了,应该是混淆导致。

在proguard-rules.pro文件中,添加如下配置:

# 对于R(资源)类中的静态属性不能被混淆
-keepclassmembers class **.R$* {
 public static <fields>;
}

重新构建release版本的aar包,并在主工程中应用,一切OK!

猜你喜欢

转载自blog.csdn.net/qinhai1989/article/details/87865903
今日推荐