Android动态切换本地源码依赖与maven依赖

不管项目架构是组件化、模块化等,我们一般都会把一些基础库放在一个单独工程B中,通过maven或是打包aar的方式集成到主工程项目A中。然而当解决问题需要添加Log日志或是修改基础库时,我们只能在B中进行修改,通过maven或是打包aar集成到A中进行验证。如果验证还有问题,重复操作。
这个时候我们就会想如果直接依赖基础库源码的话就很方便,验证成功之后再上传maven或是打包aar。这篇文档为了记录动态切换本地源码依赖与maven依赖,也就是通过变量控制是否依赖基础库源码还是依赖aar包。

集成配置

源码依赖使用gradle提供的Composing builds功能,通过includeBuild进行集成,使用substitute特性用源码替换maven依赖。

在主工程A目录下创建文件composingConfig.gradle,内容如下:

说明:testlibrary为基础库工程B中对应的基础库moudle。

ext {
    composing_dependencies = [
            composing_library = [
                    /** 是否本地依赖*/
                    isLocal : false,  
                    /** 基础库工程的路径*/  
                    projectPath : "../B",  
                    /** 基础库工程中基础库对应Moudle名称*/  
                    projectName : ":testlibrary",          
                    /** 基础库工程中基础库的maven地址 */
                    projectMaven : "x.x.x:testlibraryMaven"      
            ]
    ]
}
在主工程A的settings.gradle文件中引入composingConfig.gradle,使用includeBuild进行配置集成,内容如下:
// 引入composing的设置
apply from: "composingConfig.gradle"
// 遍历composing_dependencies中的所有配置
ext.getProperty("composing_dependencies").each { projectConfig ->
    // 如果是本地依赖
    if (projectConfig["isLocal"]){
        // 使用本地依赖进行替换
        includeBuild(projectConfig["projectPath"]) {
            dependencySubstitution {
                substitute module(projectConfig["projectMaven"]) with project(projectConfig["projectName"])
            }
        }
    }
}

以上配置就实现了通过修改isLocal这个变量值动态控制是本地源码依赖还是maven依赖。
点击sync同步工程发现一系列错误。

解决sync后遇到的问题

sync后会遇到各种各样的问题,这个时候只需要根据提示信息一个一个解决就好,以下是我当时遇到的一些问题。

gradle版本问题

A工程和B工程使用相同的gradle版本,且版本大于等于4.10.1。因为4.10.1之后才能使用以上配置。
直接在gradle-wrapper.properties中进行版本修改。

tools.build版本问题

A工程和B工程的com.android.tools.build:gradle:x使用相同版本。

依赖重复问题

具体需要看具体项目,比如rxjava版本的依赖重复问题,解决方法如下:
使用exclude进行修改。
具体参考 https://blog.csdn.net/jdsjlzx/article/details/97940958

参考

https://juejin.cn/post/6887745699636035598
https://juejin.cn/post/7165144080769351716

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值