随着项目的功能越来越多,代码和模块维护也越来越复杂,为了减少主项目的代码量,一般都会将一些公共使用的类或者功能模块抽离出来,与主项目解耦分离,当主项目中需要使用的时候,直接进行引用即可。
现在Android项目中一般使用Gradle进行依赖库的管理,我们可以在项目中使用compile project (':moudleName')来直接引用本地的模块库,为了方便在其他项目引用这些公共模块,我们将一些公共的模块上传到Github上面,然后通过发布到JitPack或者是jCenter上。不过因为jCenter中审核时间较长,而我们的公共库主要为了方便项目组使用,而更加方便快捷的JitPack就成为我们的选择。
单模块的项目
1.创建项目后,选择新建模块,项目目录如下所示:
2.修改项目的build.gradle文件,在dependencies中添加classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'。
注意:是在最外面的项目中添加,不是在app或者模块中的build.gradle添加
3.修改需要上传模块的build.gradle文件,在顶部添加如下代码:
// JitPack Maven
apply plugin: 'com.github.dcendents.android-maven'
// Your Group
group='com.github.username'
4.在Github中创建repository,如图所示:
5.将代码上传到Github中,上传后的代码结构如图所示:
6.打开项目的Github主页,创建一个Release或Tag,如图所示:
7.打开JitPack官网, 在输入框中输入Github项目主页地址,点击Look up按钮,就可将上传好的代码发布到JitPack上面去:
8.代码提交后,按照JitPack生成的配置信息,在引用的项目中通过Gradle引入即可。
在要引用项目的最外面的build.gradle文件中加入JitPack地址,如下所示:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
然后在需要引用的模块或者app中加入依赖,格式如下:
dependencies {
...
compile 'com.github.User:Repo:Tag'
//比如例子:com.github.aijun198600:AJJitPackMoudle:1.0.0
}
如果对于依赖名称不了解的话,可以打开上一步JitPack中显示的Gradle build日志,在日志中找到如下的Build artifacts。
这样子,一个单模块的公共库就已经发布了。
多模块的项目(Multi-module)
当公共库中有多个模块的时候,甚至模块之间有相互依赖的情况,是否可以继续使用JitPack来进行管理呢? 答案当然是是的。下面我们将一步一步来构建多模块项目的管理。
1.在项目中继续新增一个另外的模块,项目目录如下所示:
2.与单模块的第三部操作一样,在新添加的模块的build.gradle文件,在顶部添加如下代码:
// JitPack Maven
apply plugin: 'com.github.dcendents.android-maven'
// Your Group
group='com.github.username'
3.将新修改的代码上传到Github中,并按照单模块操作的第六步一样,创建一个Release或Tag:
4.继续按照单模块操作的第七步一样,打开JitPack官网, 在输入框中输入Github项目主页地址,点击Look up按钮,就可将上传好的代码发布到JitPack上面去,可以看到新发布的版本已经出来了:
打开打包日志可以看到我们新增加的模块已经打包成aar格式的包了:
可以看到新发布的包的依赖格式已经改变了,由原来的'com.github.User:Repo:Tag'改成了'com.github.User。Repo:Module:Tag',我们对模块的引入必须改成如打包日志发布中的artifact id,如上图中所圈中的部分。
5.添加项目之间的依赖,比如在ajlog模块中添加ajotherlog的依赖,就需要修改ajlog模块的build.gradle文件,在文件中加入依赖:
dependencies {
......
compile project (':ajotherlog')
}
Gradle Sync后然后将修改后的代码上传到Github上面,并创建一个新的Release或Tag:
然后重复第四步的操作,继续打开JitPack官网,Look up一下,就可以看到我们新的版本已经build了。
在我们的测试项目中添加ajlog模块的依赖:
compile 'com.github.aijun198600.AJJitPackMoudle:ajlog:1.0.2'
点击Sync now,可以看到底部进度条,Gradle会自动下载ajlog模块的依赖ajotherlog模块。
至此,我们多模块的公共库也可以通过JitPack来进行管理。
依赖中包含jar包或者aar包
有时候公共库中的模块有依赖jar包或者aar包,或者是一些私有的代码不便于公开,我们可以打包成jar或者aar包,作为其他模块的依赖。我们也需要研究一种方式来通过JitPack管理jar包或者aar包。经过测试多次,仍然有一些问题无法解决,期待有人研究出解决方案。
有更多问题或者好的方法可以在我的或者博瑞立方终端组中进行留言交流。