组件化背景
在开发过程中,随着开发的模块越来越多,团队成员互相交叉开发,模块不清晰,相互改代码的情况经常发生,极易造成功能被别人篡改而且ReCheck不够,上线之后等着线下报bug吧。
而组件化(也叫模块化)的开发方式就是为了解决上述问题,模块间相互独立,开发人员互相维护自己的模块,在此不细讲组件化的流程,主要说一下组件化之后的模块发布流程。
组件发布流程
(本文以发布到github为例)
本着不盲目学知识的态度,看功能之前有必要了解此功能之所为所不为,因此在讲组件发布流程之前有几个问题需要阐述一下:
-
什么是组件?
这里的组件可以理解为我们抽离的功能以及业务module,可以被主程序所依赖的模块;这里的组件可以理解为我们抽离的功能以及业务module,可以被主程序所依赖的模块; -
为什么要发布组件?
组件化开发的模式的优点不言而喻,那么组件化之后为什么要把模块进行发布呢?当然这里说的发布并不是单指发布到jencent这种,而是提供一个供别人依赖的方式,可以是公司的私服,本地maven,或者是github、jencent。。。
至于为什么要发布,原因有下面几种:
1 ):安全性:一般在大一些的互联网公司,公司的安全保密机制都比较高,会把整个app的所有的代码都给所有参与开发的同事,而是仅仅自己负责的模块,这个时候要使用其他模块的东西怎么办,拷贝模块源码吗,所以只能做依赖处理。
2 ):代码权限控制:依赖module的方式保不准会被调用次模块的同事给修改代码,发布之后只能自己修改自己的module。
2 ):方便管理:在开发流程中,单模块升级的情况很常见,最方便管理的方式就是在maven中管理不同的模块版本。
3):使用便捷:Android使用gradle管理依赖,发布的组件通过gradle使用依赖的方式极为简便。
4 ):编译较快:多module的开发模式在项目的编译期由于要进行多module的检查比较耗时,组件发布之后,使用依赖方式能缩短编译时间。 -
发布准备工作(本例以发布到github为例);
1 ):github账号,仓库
这个登录github按照流程建立一个仓库就ok,在自己的账号下建立仓库或者登录自己的账号建立一个组织,然后在组织下创建仓库都行,只不过是最后发布的仓库地址的名称不同,一个是自己的名字,组织下创建的仓库是组织名。
2 ):要打包的组件module -
发布流程:
4.1 ):在本地clone github上的仓库
4.2 ):将依赖的组件的gradle配置maven发布配置:
可以将配置发布maven的配置单独写在一个自定义gradle中,然后 组件的gradle apply from此自定义的gradle。例如://在组件module的gradle中 apply from: 'maven-release-aar.gradle'
在组件module的gradle同级目录中创建文件maven-release-aar.gradle,
// 1.maven-插件 apply plugin: 'maven' // 2.maven-信息 ext { // 这个路径是从Github上Clone的本地路径 GITHUB_REPO_PATH = "/Users/zhoubo/project/github_repository/androidlib" PUBLISH_GROUP_ID = 'com.zhoubo.mylib' PUBLISH_ARTIFACT_ID = 'mylibname' PUBLISH_VERSION = '1.0.0' } // 3.maven-路径 uploadArchives { repositories.mavenDeployer { def deployPath = file(project.GITHUB_REPO_PATH) repository(url: "file://${deployPath.absolutePath}") pom.project { groupId project.PUBLISH_GROUP_ID artifactId project.PUBLISH_ARTIFACT_ID version project.PUBLISH_VERSION } } } // 源代码一起打包(不需要打包源代码的不要添加这几行) task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.sourceFiles } artifacts { archives androidSourcesJar }
其中最上面的路径指我们从github clone下来的仓库的本地路径,打aar包发布maven可以这么配置,jar包的话去掉上方的最下面的配置(androidSourceJar)。
4.3 ):发布到本地仓库:
配置完成后sync gradle后会出现upload的task:
运行此uploadArchives就可以打包本组件并发布到本地仓库中
4.4 ):从本地仓库push到github仓库中就ok了。
组件使用
在project级别的gradle中添加仓库的url:
allprojects {
repositories {
google()
jcenter()
maven { url "https://raw.githubusercontent.com/组织或者用户名/仓库名/master"}
maven { url 'https://jitpack.io' }
}
}
然后在使用此依赖的module中,gradle中依赖:
implementation 'com.zhoubo.mylib:mylibname:1.0.0'
结束语:
本文是使用github为例做的上传,使用私服或者其他平台的话类似但不尽相同,依赖方式也会不太一样