Android Gradle模块依赖替换使用技巧

作者:汪海游龙 时间:2021-07-03 20:22:53 

背景

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

Android Gradle模块依赖替换使用技巧

解决

一开始我们通过在 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 依赖。

来源:https://juejin.cn/post/7062642189154648101

标签:Android,Gradle,模块,依赖替换
0
投稿

猜你喜欢

  • flutter中使用流式布局示例详解

    2023-08-24 23:49:06
  • Java Maven依赖传递,可选依赖,排除依赖详解

    2022-06-09 14:24:14
  • 如何基于java实现Gauss消元法过程解析

    2023-12-15 21:51:08
  • Java中实现简单的Excel导出

    2021-10-21 07:23:25
  • IDEA无法使用Git Pull的问题

    2023-05-04 10:55:39
  • SpringBoot如何实现分离资源文件并打包

    2023-02-18 12:01:49
  • C#队列Queue用法实例分析

    2023-02-27 22:35:14
  • Java实现简单的抽牌游戏

    2022-10-06 11:55:01
  • Java中synchronized的优化措施

    2022-10-09 18:19:05
  • C#实现启用与禁用本地网络的方式小结【3种方式】

    2022-04-21 18:45:14
  • Android日期显示和日期选择库

    2021-09-04 10:54:17
  • SpringBoot接口中如何直接返回图片数据

    2023-04-22 13:10:24
  • C的|、||、&、&&、异或、~、!运算符

    2022-05-30 13:10:30
  • Idea导入eureka源码实现过程解析

    2023-06-11 11:52:24
  • 深入探究Java线程的状态与生命周期

    2021-10-01 17:44:10
  • Java使用Redis实现秒杀功能

    2023-04-11 11:26:54
  • java实现五子棋小游戏

    2021-12-25 06:58:56
  • Android手机闹钟服务AlarmManagerk开发案例

    2023-05-21 14:15:28
  • Logback 使用TurboFilter实现日志级别等内容的动态修改操作

    2022-06-10 04:17:53
  • Android实现EditText的富文本编辑

    2022-04-14 21:44:29
  • asp之家 软件编程 m.aspxhome.com