问题背景
项目工程引用了一个需要自己维护的SDK,由于集成形式原因,开发SDK中需求时,验证需要重新打包给主工程,且在调试时无法打断点到SDK代码中。为了解决上述痛点,我们采用在调试时使用源码编译,发版时使用SDK编译的配置方法。
技术路线
- 两个git分别管理,仅通过修改配置完成切换
- submoudle将SDK的git集成在主工程中,为了方便可以新增一个buildType,需要调测相关需求时使用新的编译选项,这种方案修改内容较多,而且需要更改git管理范围,有些不友好,推荐方案一
方案一:切换配置方案
切换配置方案比较好执行,只需要在工程目录的settings.gradle
增加一个module配置,以及在引用这个aar的地方替换依赖为module依赖。
- 下载aar工程代码
- 给宿主工程添加aar的moudle,找工程的
settings.gradle
,增加aar的module
include 'integratedAar'
project('integratedAar:').projectDir =file('aarFilePath/app')
- 找到这个aar的依赖配置位置,改为
api project(':integratedAar')
- 重新同步gradle开始调测吧~
为了方便配置,搞了个小脚本自动化起来。
# AAR代码目录,使用前请自行查询
AAR_PATH = "xxxxxx"
SETTINGS_PATH = "settings.gradle"
DEPENDENCIES_PATH = "xxxx/build.gradle"
print("请确认是否需要修改AAR代码目录[" + AAR_PATH + "]")
# 配置Moudle
file = open(SETTINGS_PATH, "r")
content = file.read()
file.close()
content += "\ninclude 'integratedAar'"
content += "\nproject(':integratedAar').projectDir =file('" + AAR_PATH + "/AarProject/app')"
file = open(SETTINGS_PATH, "w")
file.write(content)
# 替换AAR依赖
lines = []
file = open(DEPENDENCIES_PATH, "r")
for line in file:
if "AAR_NAME" in line:
lines.append("\tapi project(':integratedAar')\n")
else:
lines.append(line)
file.close()
s = ''.join(lines)
file = open(DEPENDENCIES_PATH, "w")
file.write(s)
print("AAR源码依赖配置完成,请开始调测。")
方案二:submoudle方案
- 在需要集成module的目录执行命令
git submodule add ssh://git@gitlab.aarProject.git
- 配置module
在settings.gradle
中配置开户module
include 'integratedAar'
project(':integratedAar').projectDir = file('/AarProject/app')
projectDir
为module相对settings.gradle
的路径
- 开始调试,在工程根目录执行命令,仅在第一次时需要执行,本质就是下载代码,后面再用时注意到对应目录进行代码更新即可;
git clone ssh://git@gitlab.aarProject.git /integratedAar/aar(集成module的目录)
- 修改依赖配置。
找到依赖AAR的位置,将该行注释掉,在后面加上如下命令
api project(':integratedAar')
- 编译工程进行调试;
- 如需要切换业务分支,请cd到aar集成目录下正常切换分支就可以;
【参考资料】
http://www.worldhello.net/gotgit/04-git-model/040-submodule-model.html