Maven集成第三方库
在Android Studio中,原生支持maven仓库,可以简单的几行配置项就可以集成第三方的jar或者aar。如下两步即可实现:
配置jcenter地址
-
配置依赖
这种方式简单方便,支持广泛,但是也存在一些痛点:
需要第三方库编译打包完成,并上传到maven仓库。GitHub上很多项目并不支持maven下载。
- 如果第三方库有多个编译选项,多个编译选项组合起来数目庞大。为每个组合都打包管理,即使使用maven仓库,也是一个非常繁琐的工作。
- 简单方便,但不够灵活。如果是一个庞大的第三方库,即使你只想使用其中的一个小模块,也得把它整个的下载集成,当然你可以配置proguard来做裁剪。
- 如果第三方库有了更新,你需要更新依赖配置。当然,你可以使用通配符来配置依赖的库的版本信息。
- 如果想看看源码,需要手动去下载源码。
submodule集成第三方库步骤
git大行其道,GitHub上的开源项目也多不胜数。如果你的项目使用了git做代码管理工具,那么现在你可以使用git submodule管理第三方库的依赖。
git submodule --help可以查看该命令的用法,主要使用add、init、update几个命令。
- git submodule add 添加项目依赖,同步第三方库的代码到本项目下,自动生成一个.gitmodules的文件
- git submodule init 将.gitmodules文件里的信息添加到本项目的.git/config文件中。
- git submodule sync 同步.gitmodules里声明的子模块的url。
- git submodule update 更新submodule的最新代码。
- git submodule deinit 将.gitmodules文件里的信息从.git/config中删除。
- git submodule status 查看子模块的commit id。
如何集成
现在演示如何集成一个GitHub上的第三方的仓库。
进入你的项目目录
-
git submodule add添加子模块。运行命令后,会自动将同步子模块代码到本项目下,自动更新.gitmodules和.git/config两个文件。
git submodule add -b master git@github.com:xxx/yyy.git(拉取远程的git仓库的master分支作为子模块)
git commit -i .gitmodules yyy 提交你引入的名字为yyy的子模块。
git push 提交代码到远程仓库。这样,其他的协同开发者才能看到你的引入的子模块。
现在你可以在项目中,添加项目依赖,并在自己的代码中引用子模块的代码。
注意:
此处的演示是直接集成的GitHub上的开源项目,不存在权限的问题。
如果第三方库需要权限,在git submodule add时,不要在第三方库的url中指定用户名。
修改.git/config文件,在submodule配置的url中增加自己的用户名。
如何协同开发
现在演示如何协同开发:
进入你的项目目录。
git fetch 更新最新的代码。
git submodule status 命令可以查看子模块的引入情况。此时,你本地代码库中并没有子模块的代码。以子模块命名的文件仅仅只是一个索引index。.gitmodules文件中已经配置好了子模块。
git submodule init 命令将.gitmodules文件中的配置导入.git/config中。如果引入的子模块是需要权限验证的,还需要修改.git/config文件,在子模块配置的url中增加自己的用户名。
git submodule update 更新子模块的代码。
现在你可以在项目中,添加项目依赖,并在自己的代码中引用子模块的代码。
提交代码,协同开发。
切记切记:
- 如果submodule项目有更新,主项目的远程分支会自动的生成一个commit信息。此时,你的开发分支会出现一个子模块的diff,你只需要git submodule update和git fetch更新,diff会自动消失,不需要手动提交submodule的diff。
优缺点
优点:
- 不需要maven支持。
- 灵活。可以自己配置依赖关系,可以只依赖子模块中一部分。也可以自己写编译脚本,只编译自己需要的代码。
- 直接集成了子模块的代码库,如果需要改子模块代码,可以快速修改验证,然后提交补丁到子模块的代码库。
- 子模块和主项目可以是不同的团队维护。
缺点:
- 比maven集成方式要麻烦,需要手动更新子模块代码。
- 依赖的第三方库的分支有频繁更新时,会在本项目的git log里自动生成很多日志信息。