引用其他project的module,根据参数自动配置依赖,repo管理多个 Project
前言在开发中遇到这样一个问题在工作的project以下简称Project A中用到了Fragmentation以下简称Project B 库的三个module这个库是我在维护平时更改库中的一些bug需要先使用一段时间再推到github并发布到jcenter 所以在我的工作项目中是直接使用本地的代码没有使用jcenter去引用它。这就遇到一个问题在Project A 中改完 Project B的三个module在等到发布的时候就需要手动把代码拷贝一份到Project B中。如何能让这个过程简单点呢有小伙伴想到了可以使用软连接这样改完工作项目中的这三个module就不再重复复制代码了。如果是多人协作开发就不行了。把Project B 这三个module 分别使用git管理整个工程项目使用repo 来管理这样不管是哪个project 都可以方便的使用这三个module但是这样对Project B 的改动较大。如果Project B 发布后Project A 想通过jcenter 来引用这三个module也不是很方便。这种方式改造完基本上就是现在江湖上组件化的结构于是在想使用repo 来管理不同的Projectrepo 本质是来管理多个git的所以是project还是model没有差别。这样可以来通过repo 来管理这个另外两个问题在Android studio中 一个project 如何使用另外一个project的module呢在本地没有 Project B如何让Project A 自动通过jcenter来引用使用repo 来管理项目repo 本质是来管理多个git的所以无论是project 还是module只要用git 来管理那么他们就可以被repo管理1、repo安装折腾过Android 源码的同学应该对这个很熟悉可以直接去配置default.xml然后按照自己的思路就可以创建bin 目录并加入到环境变量$mkdir~/bin $PATH~/bin:$PATH在bin 目录下下载repo 工具$curlhttps://storage.googleapis.com/git-repo-downloads/repo~/bin/repo $chmodax ~/bin/repo2、创建default.xmlrepo 是用python开发的工具 来管理不同项目的git需要通过一个配置文件default.xml来告诉他有哪些项目远程地址是什么本地路径是什么review 等等?xml version1.0 encodingUTF-8?manifest!-- --remotenamegithubfetchhttps://github.com/JantHsueh/remotenamealiyunfetchhttps://code.aliyun.com/cmoon/defaultremotealiyunrevisionmastersync-j4/projectnamecm-android.gitpathxw/projectnameFragmentation.gitpathFragmentationremotegithub//manifestremote远程仓库地址配置可以多个。name: 名字也用于子仓库的 git remote 名称.git/config 里的 remotealias: 别名可省略建议设为 origin 设置了那么子仓库的 git remote 即为此名方便不同的 name 下可以最终设置生成相同的 remote 名称fetch: 仓库地址前缀即 project 的仓库地址为: remote.fetch project.namepushurl: 一般可省略省略了则直接用 fetchreview: Gerrit code review 的地址如果没有用 Gerrit 则不需要配置也就不能用 repo upload 命令了revision: 使用此 remote 的默认分支default配置默认远程仓库地址remote :它的值 是上面remote 标签 配置的name 值表示远程仓库地址revision : 远程分支sync-j : 使用线程数projectname : 远程仓库的项目名配合remote标签的fetch值共同组成完整仓库地址remote.fetch project.namepath工程在本地的存储路径remote 它的值 是上面remote 标签 配置的name 值表示远程仓库地址。如果没有配置使用default中的配置更多参数配置查看官方文档repo Manifest Format3、repo 初始化 和代码下载# 初始化 repo default.xml 文件 会下载到 .repo/manifests/ 目录下repo init-uhttps://github.com/anlory/manifest# 根据配置下载代码reposync至此repo就把这两个project 管理起来了在项目中应该如何配置project直接的关系呢如何引用其他projectdefault.xml 在 .repo/manifests/ 目录下 为了在project 中 能方便的通过 default.xml 控制项目所以创建default.xml 软连接放在project中并加入到.gitignore 中在setting.gradle 中指定 module 的路径这样就可以指定到其他project 中的 moduleinclude:app,:mvvm//设置全局变量在setting.gralde 和 build.gradle 中设置环境变量是不一样的gradle.ext.localFragmentationfalse//在default.xml 中判断是否有对应的project如果有repo sync 后 本地就有对应的代码就配置使用本地工程代码def manifestnewXmlParser().parse(${rootProject.projectDir}/default.xml)manifest.project.each{it.attributes().each{k,v-// path 对应的值包含 Fragmentation 字段if(kpathv.contains(Fragmentation)){gradle.ext.localFragmentationtrue//指定Fragmentation工程的路径在本示例中两个工程的目录是同级的def path../Fragmentation include :Fragmentationproject(:Fragmentation).projectDirnewFile(path)include :fragmentationproject(:fragmentation).projectDirnewFile(path,fragmentation)include :fragmentation_coreproject(:fragmentation_core).projectDirnewFile(path,fragmentation_core)include :fragmentation_swipebackproject(:fragmentation_swipeback).projectDirnewFile(path,fragmentation_swipeback)}}}gradle.ext.xx 和rootProject.ext.xx的用法差不多只是变量存放的位置不同在build.gradle 中配置全局变量 使用 rootProject.ext.在setting.gradle中配置全局变量使用 gradle.ext更多全局变量的使用可参考这篇文章 gradle使用技巧之全局变量如何根据参数自动配置不同的依赖这个就很简单了根据上面设置的全局变量来判断dependencies{if(gradle.ext.localFragmentation){apiproject(:fragmentation)apiproject(:fragmentation_swipeback)}else{api me.xuexuan:fragmentationx:1.0.6 api me.xuexuan:fragmentationx-swipeback:1.0.6}}当然可以有更多的玩法下面代码是参考这里的需要引用哪个项目从gradle.properties的配置中获取。def moduleVersionsnewProperties()def moduleVersionsFilenewFile(${project.projectDir}/gradle.properties)moduleVersions.load(moduleVersionsFile.newDataInputStream())dependencies{def projectsmoduleVersions.stringPropertyNames()rootProject.subprojects.each{if(it.name!host){implementation it projects.remove(it.name)}}projects.each{//为了方便引用这里要求我们上传到 maven 的各模块的包遵循一定的规则groupid 需要保持一致// artifactid 最好是以子 module 的 project.name 来命名如果不是这样的规则就需要自己修改 gradle 脚本啦implementationme.ailurus.repo:${it}:${moduleVersions.getProperty(it)}}}结语在我看来上面这种方式算是project 之间的模块化由于 project 可以多module的原因很容易在多个project里 使用空 application 项目来打包apk请点赞、收藏感谢大家的支持欢迎评论区提问、吐槽参考使用 repo 组织 Android 工程Gradle Repo一个能管理多个Git仓库又能快速切换分支的Gradle插件用repo管理自己的仓库将数据从settings.gradle传递到build.gradleAndroid Studio在同一个窗口中打开多个Project【附效果图附源码】

相关新闻

Unity3D海量倾斜摄影OSGB模型分层加载与性能优化实战

Unity3D海量倾斜摄影OSGB模型分层加载与性能优化实战

1. 项目概述:当海量倾斜摄影遇上Unity3D如果你尝试过将城市级、园区级的倾斜摄影OSGB模型导入Unity3D,大概率会经历一场“内存与性能的噩梦”。模型动辄几十上百GB,三角面数以亿计,直接加载?Unity编辑器会卡死&#xf…

2026/8/2 18:52:56 阅读更多 →
【20年HR总监亲授】:AI面试官已上线——3招让简历通过算法筛选率提升400%

【20年HR总监亲授】:AI面试官已上线——3招让简历通过算法筛选率提升400%

更多请点击: https://intelliparadigm.com 第一章:AI面试官崛起:就业市场结构性变革的临界点 人工智能正以前所未有的深度介入招聘全流程,从简历初筛、语音微表情分析到多轮模拟行为评估,AI面试官已不再是概念原型&am…

2026/8/2 18:52:56 阅读更多 →
Unity Addressables构建全流程解析:从本地到远程部署与热更新

Unity Addressables构建全流程解析:从本地到远程部署与热更新

1. 项目概述:为什么Addressables的构建流程如此关键?如果你正在用Unity开发一个稍微有点规模的游戏,特别是那种资源动不动就几个G的手游或者PC游戏,那么AssetBundle这套老方案估计已经让你头疼不已了。依赖管理混乱、内存泄漏、热…

2026/8/2 18:52:56 阅读更多 →

最新新闻

数字人口型不同步怎么办:2026年音频驱动数字,5款实测解析

数字人口型不同步怎么办:2026年音频驱动数字,5款实测解析

数字人口型不同步,到底卡在哪个环节 做口播矩阵、数字人播客、不露脸带货时,最让人崩溃的往往不是脚本,而是渲染出来的数字人嘴型对不上音频:辅音延迟半拍、长句尾音还在动、情绪重音完全错位。一旦口型不同步,观众第…

2026/8/3 0:13:55 阅读更多 →
2026年上海短视频代运营公司盘点:B端企业精准获客与选型指南

2026年上海短视频代运营公司盘点:B端企业精准获客与选型指南

2026年,短视频营销已彻底告别粗放式的流量红利期,全面迈入“精耕细作”的深水区。对于上海地区的B2B及高客单价企业而言,自建团队往往面临人力成本高企、专业壁垒难以逾越的困境,代运营成为务实之选。然而,当前市场鱼龙…

2026/8/3 0:12:55 阅读更多 →
激励员工的八大法则

激励员工的八大法则

“激励员工的8大法则”并非统一理论,而是管理实践中核心方法的总结,结合职场需求与人性特点,整理如下: 1.目标激励:将企业目标转化为员工个人目标,设置“跳一跳够得着”的清晰目标(如OKR&#x…

2026/8/3 0:12:55 阅读更多 →
终极Adobe全家桶下载指南:macOS上最快速的Adobe下载工具完全教程

终极Adobe全家桶下载指南:macOS上最快速的Adobe下载工具完全教程

终极Adobe全家桶下载指南:macOS上最快速的Adobe下载工具完全教程 【免费下载链接】Adobe-Downloader macOS Adobe apps download & installer 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-Downloader 还在为Adobe官网复杂的下载流程而烦恼吗&…

2026/8/3 0:12:55 阅读更多 →
3步本地化解密:深度剖析QQ音乐加密格式转换技术

3步本地化解密:深度剖析QQ音乐加密格式转换技术

3步本地化解密:深度剖析QQ音乐加密格式转换技术 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果…

2026/8/3 0:12:54 阅读更多 →
2026年上海短视频代运营公司盘点:5家机构的适配场景与选型参考

2026年上海短视频代运营公司盘点:5家机构的适配场景与选型参考

开篇引言2026年的短视频生态已进入"精耕细作"阶段。流量红利消退、算法迭代加速、用户注意力碎片化,企业自建短视频团队面临月均3-5万元的人力成本压力,且从0到1的磨合期往往长达3-6个月,见效慢、试错成本高。在此背景下&#xff0…

2026/8/3 0:11:54 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →