随着项目的功能越来越多,代码和模块维护也越来越复杂,为了减少主项目的代码量,一般都会将一些公共使用的类或者功能模块抽离出来,与主项目解耦分离,当主项目中需要使用的时候,直接进行引用即可。

现在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包。经过测试多次,仍然有一些问题无法解决,期待有人研究出解决方案。

有更多问题或者好的方法可以在我的或者博瑞立方终端组中进行留言交流。

Android公共jar,使用JitPack管理Android项目中公共模块库相关推荐

  1. IntelliJ IDEA 如何知道项目中的模块数据_如何从项目源中选择模块加入当前项目中(添加模块)_如何移除项目中的模块(移除模块/删除模块)

    文章目录 IDEA 如何获取项目的模块数据 从项目源中选择模块加入当前项目中 如何移除项目中的模块 方式一,选择模块的根目录(Content Root),鼠标右键 Remove 方式二,打开[项目结构 ...

  2. 项目中的模块剥离成项目_使用MCEBuddy 2从电视录制中剥离广告

    项目中的模块剥离成项目 One of the great things about time-shifting your television viewing is that you are able ...

  3. android导入库项目,如何在android studio项目中导入开源库?

    导入Jar文件 这种可能很常见,可以下载到别人搞好的jar包,这样可以直接在自己的主module下创建libs文件夹(我这里这样,只是为了兼容eclipse方式),然后把jar文件放进去,然后在mod ...

  4. android项目中导入opencv库,将第二个JNI库包含到我的Android项目(OpenCV)后...

    我试图将OpenCV添加到我现有的Android项目中,但是在合并它们时遇到了以下错误: 12-08 16:15:21.951 22052-22052/ai.inbi.face_recognition ...

  5. 对Android和iOS项目中的模块结构和类结构设计的探讨

    1. 现有的代码规范缺少探讨的部分 1.1 关于项目的代码结构 通常来说,一个项目由多个模块组成:一个模块由多个类组成:一个类由多个方法组成:一个方法由多条语句组成: 按照代码粒度从大到小,可以划分为 ...

  6. 如何管理 vue 项目中的数据?

    vuex 如何管理 vue 项目的数据?这个问题似乎早已经有答案了,无非就是使用 vuex ,全局 store,整个应用维护一个超大的 Object,界面的显示情况随着超大 Object 的变化而变化 ...

  7. 本地jar包,引入java项目中maven中并且打包

    最近因为项目原因,需要引入外部jar因此做一个记录,话不多说,来点干货 方法1: 引入jar包直接到项目中 src下创建lib包,把需要的引入 修改pom文件,就不解释了吧,又不了解的就自行百度吧,不 ...

  8. ufserver文件上传服务器-用来管理你项目中的图片-性能可比Java、Python高十倍不止

    大家在做项目的时候如果是web项目,项目又不大的情况下上传图片一般都是上传到项目的webapp目录下面,webapp下面会有一个upload的文件夹,今天给大家分享的是在项目中如何把图片上传到其他服务 ...

  9. vue管理后台项目中使用wangEditor富文本编辑器

    背景 公司需要做一个后台文章管理的模块,通过富文本编辑器编辑文章,在前端显示.调研了很久,决定使用wangEditor -- 轻量级 web 富文本编辑器,配置方便,使用简单.一些编辑器的说明. 开始 ...

最新文章

  1. Sql Server函数全解三数据类型转换函数和文本图像函数
  2. Map的4种遍历方法
  3. 【转】内存耗用:VSS/RSS/PSS/USS
  4. Layui / WEB UI
  5. ldap radius mysql_radius vs ldap
  6. mysql复制主从集群搭建
  7. 快报:Java跌惨!Python背后或有推手?网友:心态已崩!
  8. 查找算法:斐波那契查找算法实现及分析
  9. Delphi调用Android的.so文件(转)
  10. python类2继承-抽象-多态
  11. 捷联惯导matlab算法,捷联惯导算法与组合导航原理讲义(20170220).pdf
  12. 希捷固件门终极解决方法
  13. 2020 CUMCM全国大学生数学建模竞赛 B题 Notes
  14. chrome为默认浏览器时,解决ftp无法用windows资源管理器打开,而是跳转到chrome打开
  15. SSLv3 协议漏洞‘POODLE’修复与相关概念
  16. 非洲机皇传音继续出圈
  17. TP6 微信小程序消息推送配置Token校验失败200302
  18. pandorabox php7,飞鱼星G7免拆刷入pandorabox
  19. 【软考 系统架构设计师】计算机网络② 网络规划与设计
  20. ALM系统开发工程师职业发展调查

热门文章

  1. IP应用加速技术详解:如何提升动静混合站点的访问速率?
  2. 1 分钟记住 docker 镜像和容器常用基本命令
  3. 投稿指南 | 云计算领域最前沿资讯、技术,期待您的专业解读!
  4. 顶级技术大咖,揭秘实时音视频开发的超级风口
  5. OPPO 正式发布 ColorOS 7,“轻”装上阵带来多项亮眼新功能……
  6. Aruba 推出Instant On 为中小型企业提供安全、高速的无线连接
  7. 多媒体计算机辅助教学与课件制作,清华大学出版社-图书详情-《计算机辅助教学多媒体课件设计制作与应用》...
  8. php里的utf-8编码,php – 修复损坏的UTF-8编码
  9. golang 排序_堆 堆排序 优先队列 图文详解(Golang实现)
  10. oracle证书洛阳,ORACLE手工建库