欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Android技能树点亮计划-多module项目仓库设计

时间:2023-07-11
背景

在Android App的成长过程中,随着包功能越来越多,团队越来越复杂,为了保证功能的清晰和可维护性、增加模块的内聚性,减小git推代码冲突的风险等等,App的开发模式会慢慢变成集成开发模式

集成开发模式

每个人负责一个或者多个模块,模块之间相互隔离,独立进行打包和升级,最后以远端依赖的方式集成到App中进行打包

问题

在采用集成开发模式的时候会碰到一个问题,因为主App都是通过implement 远端的依赖进行打包的,当在本地开发的时候,如何对模块的本地代码进行调试呢?
一般我们的做法是这样的:

在build.gradle中将远端的依赖改为本地依赖在setting.gradle中定义本地依赖的模块地址

// build.gradle文件dependencies { // 在主App中是这么定义依赖的 implementation 'io.github.pettywing:floatwindow:1.0.0' // 当业务在本地开发的时候改为 implementation project(':floatwindow')}// setting.gradle文件 include ':floatwindow'project(":floatwindow").projectDir = file("../floatwindow/floatwindow")

但这样设置很麻烦,风险也很高,每次项目拉到本地都要改一次,到远端打包的时候还要在修改回来,有没有啥简单的方法呢

解决 在本地新建一个local_develop.gradle文件,并添加到git.ignore

ext { dependencies = [ [ // 是否开启模块的本地源码依赖,true则源码依赖,false则AAR依赖 isLocalModule: true, // 代码仓库存放在本地之后相对主工程的路径,因为我放在了主工程的同级目录,所以这里要的相对路径要跳出一级目录 projectPath : "../../android/Floatwindow", // module name projectName : ":floatwindow", // maven groupId:artifactId projectMaven : "io.github.pettywing:floatwindow" ] ]}

在setting.gradle添加如下代码

File localPropertiesFile = new File(rootDir.getAbsolutePath() + "/local.properties")File localDevelopFile = new File(rootDir.getAbsolutePath() + "/local_develop.gradle")if (localPropertiesFile.exists() && localDevelopFile.exists()) { apply from: "local_develop.gradle" if (ext.has("dependencies")) { ext.getProperty("dependencies").each { projectConfig -> // 如果工程是本地依赖,使用本地工程源码进行替换 if (projectConfig["isLocalModule"]) { includeBuild(projectConfig["projectPath"]) { dependencySubstitution { substitute module(projectConfig["projectMaven"]) with project(projectConfig["projectName"]) } } } } }}

这样当项目在远端打包的时候,由于没有local_develop.gradle,会用远端的依赖版本进行打包。项目在本地运行的时候,如果你添加了local_develop.gradle,就会自动把远端依赖改本地依赖;并且由于local_develop.gradle被ignore,多个开发者在使用的过程中也不会相互影响。

实践

AndroidUi仓库

其他

发布模块到Maven
Android技能树点亮计划Git库
Android技能树点亮计划-语雀文档库
稀土掘金:悠二
Github:PettyWing

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。