submodule集成第三方库

2023-01-08 10:28:12

Maven集成第三方库

在Android Studio中,原生支持maven仓库,可以简单的几行配置项就可以集成第三方的jar或者aar。如下两步即可实现:
  • 配置jcenter地址
    配置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里自动生成很多日志信息。
  • 作者:47045039
  • 原文链接:https://blog.csdn.net/mountains2001/article/details/72638009
    更新时间:2023-01-08 10:28:12