如这样的一个场景:
APP依赖了一个AAR (A) :
implementation(name: 'lib-terminal-release', ext: 'aar')
而AAR(A)依赖了AAR(B):
implementation 'com.pnikosis:materialish-progress:1.7'
AAR(B)中有一个自定义控件的属性:
<declare-styleable name="ProgressWheel">
<attr format="boolean" name="indicator_color"/>
</declare-styleable>
此时编译APP就会出现如下错误:
C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lib-terminal-release.aar\dba5ff5d5375a81c81bdbbb905cacabd\res\layout\bf_activity_main.xml:38: error: attribute indicator_color (aka com.smates.selfservice:indicator_color) not found.
即APP无法找到AAR(B)中的属性,检查AAR(A)中的values.xml,发现A并没有把B中的属性添加进去:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Library</string>
<string name="default_progressbar">Default Progressbar:</string>
<!--这里本来应该是从B中合并过来的,然后发现并没有-->
<!--
<declare-styleable name="ProgressWheel">
<attr format="boolean" name="matProg_progressIndeterminate"/>
</declare-styleable>
-->
<!-- 这里是A的自定义属性 -->
<declare-styleable name="akkkk">
<attr format="boolean" name="aaa">aa</attr>
</declare-styleable>
</resources>
通过万能的度娘,发现fat-aar-android可以合理的合并嵌套aar的资源,使用这个插件,成功将B中的属性合并到A中去,即:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Library</string>
<string name="default_progressbar">Default Progressbar:</string>
<declare-styleable name="ProgressWheel">
<attr format="boolean" name="matProg_progressIndeterminate"/>
</declare-styleable>
<!-- 这里是A的自定义属性 -->
<declare-styleable name="akkkk">
<attr format="boolean" name="aaa">aa</attr>
</declare-styleable>
</resources>