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

Android项目中如何让不同AAR库使用各自版本的基础库?

解决Android中多AAR依赖不同版本基础库的冲突问题

针对你遇到的多个AAR依赖不同版本基础库导致运行崩溃的问题,这里有几个可行的解决方案:

1. 使用Shadow插件重命名基础库包名

这是最直接的解决方式,通过修改其中一个版本基础库的包名,让两个版本的基础库可以在APK中共存。具体步骤:

  • 在项目根目录的build.gradle中添加Shadow插件依赖:
    buildscript {
        dependencies {
            classpath 'com.github.johnrengelman.shadow:shadow-gradle-plugin:7.1.2'
        }
    }
    
  • 创建一个单独的Android Library模块,引入v1.2版本的基础库,然后在该模块的build.gradle中应用Shadow插件并配置包名重映射:
    apply plugin: 'com.android.library'
    apply plugin: 'com.github.johnrengelman.shadow'
    
    android {
        // 常规的模块配置(compileSdk、defaultConfig等)
    }
    
    shadowJar {
        relocate 'com.example.base', 'com.example.base.v1_2'
    }
    
  • 编译这个模块后,将生成的重命名后的基础库引入项目,同时调整依赖v1.2的AAR的依赖指向:如果是本地AAR,手动替换基础库依赖;如果是远程依赖,排除原基础库后引入重命名版本。

2. 采用动态功能模块(Dynamic Feature Module)隔离依赖

把两个AAR分别放到独立的动态功能模块中,每个模块可以单独管理自己的依赖版本:

  • 新建两个Dynamic Feature Module,分别对应两个业务独立的AAR;
  • 在每个动态模块的build.gradle中,单独声明各自依赖的基础库版本,主模块无需引入这两个基础库;
  • 运行时通过动态加载的方式调用两个AAR的功能,这样两个模块的依赖相互隔离,不会出现版本覆盖的问题。

注意:这种方式要求应用支持App Bundle,且minSdkVersion至少为21,同时需要额外处理模块加载、权限适配等逻辑。

3. 手动修改基础库包名并替换依赖

如果不想依赖插件,也可以手动修改基础库的包名:

  • 下载v1.2版本基础库的源码,全局替换包名(比如把com.example.base改成com.example.base.v1),编译成新的AAR;
  • 在项目中引入这个重命名后的基础库,同时在依赖v1.2的AAR的配置中排除原基础库:
    implementation(name: 'aar-lib-v1-dep', ext: 'aar') {
        exclude group: 'com.example', module: 'base'
    }
    implementation project(':base-v1_2')
    
  • 另一个AAR正常引入v2.0版本的基础库即可。

额外注意事项

  • 如果基础库中使用了反射或硬编码的包名,重命名后需要同步修改相关代码,否则会出现反射失败的问题;
  • 动态功能模块会增加应用复杂度,需充分测试模块加载流程;
  • 无论采用哪种方案,都要分别验证两个AAR的功能,确保各自依赖的基础库版本能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:57:26