Androd Gradle 对其使用模块依赖的替换

Posted 小陈乱敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Androd Gradle 对其使用模块依赖的替换相关的知识,希望对你有一定的参考价值。

背景

我们在多模块项目开发过程中,会遇到这样的场景,工程里依赖了一个自己的或者其他同事的 aar 模块,有时候为了开发调试方便,经常会把 aar 改为本地源码依赖,开发完毕并提交的时候,会再修改回 aar 依赖,这样就会很不方便,开发流程图示如下:

解决

一开始我们通过在 appbuild.gradle 里的 dependency 判断如果是需要本地依赖的 aar,就替换为 implementation project 依赖,伪代码如下:

dependencies 
    if(enableLocalModule) 
        implementation 'custom:test:0.0.1'
     else 
        implementation project(path: ':test')
    
 

这样就可以不用每次提交代码还要修改回 aar 依赖,但是如果其他模块如果也依赖了该 aar 模块,就会出现问题,虽然可以继续修改其他模块里的依赖方式,但是这样就会有侵入性,而且不能彻底解决问题,仍然有可能出现本地依赖和 aar 依赖的代码不一致问题。

Gradle 官方针对这种场景提供了更好的解决方式 DependencySubstitution,使用方式如下:

步骤1:在 settting.gradle,添加如下代码:

// 加载本地 module
if (file("local.properties").exists()) 
    def properties = new Properties()
    def inputStream = file("local.properties").newDataInputStream()
    properties.load( inputStream )
    def moduleName = properties.getProperty("moduleName")
    def modulePath = properties.getProperty("modulePath")
    if (moduleName != null && modulePath != null) 
        include moduleName
        project(moduleName).projectDir = file(modulePath)
    
 

步骤2:在 appbuild.gradle 添加以下代码

configurations.all 
    resolutionStrategy.dependencySubstitution.all  DependencySubstitution dependency ->
        // use local module
        if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == "custom") 
            def targetProject = findProject(":test")
            if (targetProject != null) 
                dependency.useTarget targetProject
            
        
    
 

步骤3::在 local.properties

moduleName=:test
modulePath=../androidStudioProjects/TestProject/testModule 

到这里就大功告成了,后续只需要在 local.properties 里开启和关闭,即可实现 aar 模块本地依赖调试,提交代码也不用去手动修改回 aar 依赖。

尾声

一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!

最后需要同款资料的,可以 私信我回复【学习】或者扫描下方二维码我愿意分享给你!

为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!

**再次感谢所有给我提供过题目的朋友们,感谢一路有你!

CSDN 社区图书馆,开张营业! 深读计划,写书评领图书福利~

以上是关于Androd Gradle 对其使用模块依赖的替换的主要内容,如果未能解决你的问题,请参考以下文章

Androd Gradle 使用技巧之模块依赖替换

[Androd] Gradle 使用技巧之模块依赖替换

Androd Gradle 使用技巧之模块依赖替换

androd中怎么替换android seekbar 刻度的系统滑块图标

Android gradle 动态添加模块依赖

如何根据构建变体使用 gradle 不同依赖模块的依赖项进行编译?