You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fat-aar打包AAR时子模块Data Binding Adapter失效问题

解决fat-aar打包子模块Data Binding Adapter不生效的问题

问题场景

使用fat-aar插件将包含多个子模块的Android库打包为单个AAR后,主模块定义的Data Binding Adapter在应用侧可正常使用,但子模块中的适配器无法被识别,触发如下错误:

Cannot find a setter for <android.widget.TextView app:formatDate> that accepts parameter type 'long'
If a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches.

已验证子模块适配器注解正确、子模块已被打包进AAR、Gradle配置无冲突,怀疑是fat-aar打包过程未正确处理子模块的Data Binding相关代码。

环境信息:

  • Gradle版本:8.0+
  • Android Gradle Plugin版本:8.0+
  • fat-aar插件:aasitnikov维护版本

解决思路与操作建议

1. 检查子模块适配器的访问权限

确保子模块中@BindingAdapter注解的方法和所在类都是public权限:

  • Kotlin代码避免使用internal修饰适配器类或方法;
  • Java代码确保类和方法标注为public。
    Data Binding处理器需要能访问到适配器类和方法,权限不足会导致打包后无法被识别。

2. 配置fat-aar强制打包子模块的依赖元数据

在主模块的build.gradle中,给embed的子模块添加transitive=true,确保包含子模块的所有依赖(包括Data Binding生成的元数据和代码):

dependencies {
    embed project(path: ':your-submodule', configuration: 'default') {
        transitive = true
    }
}

同时确认主模块和所有子模块都开启了Data Binding:

android {
    buildFeatures {
        dataBinding true
        // 若用到View Binding也需开启
        viewBinding true
    }
}

3. 验证AAR中是否包含子模块的Data Binding资源

将生成的AAR解压,检查以下内容:

  • 子模块的适配器类是否存在于classes.jar中(对应子模块的包路径);
  • res/layout或assets目录下是否存在data_binding_layout_info相关文件(记录Data Binding适配器信息)。
    如果缺失,说明fat-aar未打包这些元数据,需调整插件配置或尝试其他版本。

4. 手动合并Data Binding的BR类(可选)

若fat-aar未自动合并子模块生成的BR类,可尝试将子模块BR类的字段手动合并到主模块的BR类中(注意避免字段名冲突)。此方法较为繁琐,仅作为临时方案。

5. 更换或升级fat-aar插件版本

当前使用的fat-aar版本可能对AGP 8.0+的Data Binding支持存在兼容性问题,尝试切换到最新版本或其他维护活跃的分支,确认是否修复了该打包问题。

6. 临时替代方案:迁移适配器到主模块

若以上方法均无效,可临时将子模块的Data Binding Adapter迁移到主模块中,确保适配器能被正常打包和识别,同时继续排查插件配置问题。


内容的提问来源于stack exchange,提问作者Sbirulinu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:46:11