Android studio中的Gradle有着自身临时存储的仓库,但是非常不易于管理,这种情形下引入Maven仓库。
官网的Maven仓库。
Android studio使用Gradle引用的第三发库来自两种网络仓库,一种时MavenCenter,另一种是JCenter。
两个仓库都具有相同的使命:提供Java或Android library服务。上传到哪个取决于开发着。
Android studio选择Maven Center作为默认仓库,如使用老版本Android studio创建一个新项目。mavenCentral()会自动定义在build.gradle中。使用新版的Android studio创建新项目,jcenter()自动被定义,而不是mavenCentral()。
buildscript {
repositories {
google()
jcenter() //构建脚本引入jcenter
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter() //全部工程引入jcenter
}
本地缓存:
Maven仓库将经常使用的第三方库缓存到本地,不用再每次使用时重新下载。同样,Gradle也会对引用的第三库进行缓存,使用Android studio的过程中就会存在Maven和Gradle两种仓库缓存。
使用本地Maven缓存,首先要了解Android studio默认的Maven仓库的缓存地址。Mac的默认地址为:/Users/用户名/.m2/repository,window是:C:/Users/用户名/.m2/repository。
buildscript {
repositories {
google()
mavenLocal()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenLocal()
}
}
当引用第三方库时,如再引用的仓库地址中找到这个库,则不会下面的地址仓库中查询是否存在这个库。使用本地仓库时将mavenLocal填写为引用的第一个仓库,保证先从本地的Maven仓库中获取引用库。
然后在Library module的build.gradle中添加一下代码段,使用publishing命令:
apply plugin: 'maven-publish'
publishing{
publication{
maven(MavenPublication) {
artifact "${buildDir}/outputs/aar/core-debug.aar"
group "com.wangyongyao.core"
artifactId "modulebus"
version "4.4.1"
}
}
}
本地缓存的优势在于通过仓库缓存,缓存了需要依赖使用的底层模块,能极大降低编译的耗时。
使用远程仓库可以让不同的电脑终端都能获取项目的组件或者业务模块资源,能够保证给开发者提供稳定和安全的第三方资源。
搭建私有仓库有助于多人协作开发项目,可以提高集成的稳定性和库引用版本的可控性,也减少繁琐的第三方库的发布工作。
在Android开发中,一般都会引用第三方库,这些库通常是一些常见的SDK工具。在组件化开发中,因为Android studio的限制,无法通过正常的方式编译生成SDK。
Gradle的依赖引入机制引入的就是Android的SDK。第三方库时Android的一些开发工具,还包括JNI使用so库/Gradle的插件/Android studio运行开发的脚本工具/Java源码的jar工具等。
aar文件的制作。
Library module编译完成,最终生成的aar文件。但其生成的aar文件并不能包含complie引用的Library module的源码和资源。
两种实现方案:
当SDK工具库生成后,可以将直接以aar包形式提供外界使用,也可以上传到公用的仓库作为第三方库。