把自己的工具库代码放到另一个项目中,让其他项目引用

一般情况下,我们的工具库代码可以和主项目代码放在同一个项目里

但有时会出现这种情况

工具库代码同时被多个主项目使用、依赖,这时两个主项目中就会有两份工具库的代码,主项目代码是不共用的,只被主项目使用,而工具库代码是被多个主项目共用的,这时如何让两个主项目中的两份工具库代码保持同步就成了一个问题

这时可以考虑,把工具库代码发布到jcenter上,让主项目以依赖库的形式引用工具库代码。但这里有个问题,依赖库的代码是不会经常变动的,而工具库代码是随着主项目开发,会一直变动的,这时,依赖库的形式就不方便不适用了

这时必须同时维护两份代码,一份工具库代码,一份是不同的主项目的代码,然后让所有的主项目去依赖这个工具库中的代码

 

有两种方式可以考虑:

1.

New一个Library Module,然后把所有的工具库代码都放在这个Module下,然后对这个Module的目录单独建一个git仓库

(当前根目录下有一个git仓库,想在这个根目录的子目录下再建一个git子仓库
在子目录下使用git init命令就行了
如果不在子目录下新建仓库的话,git操作会默认针对根目录下的git仓库,而不是针对当前目录,这时就不能单独上传Library Module代码了)

这时多个不同的主项目就可以去依赖这个Module,哪个主项目依赖的Module代码发生了变化,都可以马上更新到托管平台上,然后更新到另一个主项目中依赖的Module代码,这样,Module代码的更新,可以联动到不同的主项目中,这样就解决了多个主项目依赖相同的Module代码更新的问题

但这时要注意,工具库Library Module代码的更新和主项目代码的更新、提交都必须分别进行(不知道有没有同时提交的解决方案。。好像可以同时提交的话,在逻辑上也说不通)

主项目要依赖工具库代码时,在主项目当前根目录下新建一个文件夹,然后在这个文件夹中把工具库Module代码clone下来,然后再让主项目的app Module依赖这个工具库Library Module即可

(这种方式有点问题,待补充)

2.

首先新建一个项目,选no activity(因为我们的项目是作为依赖库专门让其他项目依赖的,所以不需要app Module,也不需要LaunchActivity)

把自己的工具库代码放到另一个项目中,让其他项目引用

项目结构:

把自己的工具库代码放到另一个项目中,让其他项目引用

新建Library Module:

把自己的工具库代码放到另一个项目中,让其他项目引用

把自己的工具库代码放到另一个项目中,让其他项目引用

Librarys 目前是被公司多个项目同依赖的公共库,考虑到以后里面可能有多个Module,建立了一个单独的Project来放置它们
MOIN 是主项目的Project,里面只有一个app Module,它依赖了Librarys项目中的业务lib Module
因为使用相对路径来引用,更灵活,所以没有选择把Librarys的Module直接导入MOIN使用的方式。而是使用了两个Project
这个目录只是用来共同放置这两个Project。而且也是为了git上传方便。

修改Librarys:进入Librarys目录,在Librarys中上传git;
修改MOIN项目:直接在本目录下,把MOIN Project和Librarys Project一起上传到git。使用这种方式是因为需要在MOIN项目中保存MOIN所引用的业务Lib的源代码。
    综合了多个原因考虑
    把Librarys只保存一份最新的源代码:存在其它旧项目引用老代码的可能,所以必须保存旧版本的代码
    没有分别上传Librarys代码、MOIN项目代码的原因:如果不把Librarys源代码和MOIN项目源代码一起上传,日后下载来MOIN项目时,不能直接跑,还需要同时把Librarys的代码拉下来,可能存在其原本引用的Librarys代码已经被更新的情况,这个时候拉下来的代码不能直接运行,还需要找新Librarys代码导入然后重新修改、或者找旧Librarys代码再导入先跑测试,这都很麻烦。特别找旧版本的Librarys代码可能不方便
    针对以上的问题,没有使用JCenter(项目引用github库的方式)的原因:1.安全性;2.考虑到实际情况。Librarys代码的更新,通常是伴随着开发一个新的app,在app的开发过程中伴随着Librarys代码的改动,这改动是很频繁很大的。不像常规的github库,一般它们库的开发和使用库的项目的开发是独立的,一般都是app以jar包的方式引用。而Librarys库的开发和app通常是并行的,改动可能较为频繁。这样如果app以网络库的方式引用Librarys,那么修改这个过程就很麻烦(涉及到网络因素等等)。所以必须以源代码的形式引用。

 

3.

在代码托管平台上新建一个仓库,命名为LmcModule(顾名思义,包含工具库代码的Library Module)

在当前主项目中引入(或第一次,新建)这个Module,代码更新随主项目

其他项目要使用这个Module的时候,选择File>Import Module把自己的工具库代码放到另一个项目中,让其他项目引用

然后是重点,更新,多个主项目下的LmcModule下的代码怎么保持同步

可以这样,首先在LmcModule目录下新建一个git仓库,当当前主项目的Module代码发生改变后,到LmcModule目录下把更新推送上去

然后再到另一个主项目的Module目录下,把更新拉取下来,这样来保持同步