IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android技能树点亮计划-多module项目仓库设计 -> 正文阅读

[移动开发]Android技能树点亮计划-多module项目仓库设计

背景

在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")

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

解决

  1. 在本地新建一个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"
            ]
    ]
}
  1. 在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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:49:02  更:2022-02-09 20:49:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:03:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码