本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在多数情况下,公司的多个项目都会有一些共通的核心库。一旦修改起来,多个项目来回修改很麻烦,也很容易乱。所以可以将相关的核心库提取出来做成一个library,创建一个本地maven库。多个项目引用起来就方便多了。维护起来也简单。
创建一个核心库的工程
-
创建一个新的Android工程,直接选择任意模板,或者Empty都可以
-
点击File -> New -> Moudule ->Android Library, 点击Next,然后需要配置包名等信息,点击Finish完成即可
-
然后就在创建的Module中进行核心功能的开发。
其他工程引用aar
可分为以下几种方式
- 通过aar文件方式
-
开发完成的库,直接执行Module下 assemble的gradle命令即可
右键Run这个task就会在build目录下的outputs目录中生成aar文件
-
将aar文件拷贝到需要引用该库的工程的app/libs目录中.在app/build.gradle中配置参数,如下:
android{
.
.
.
}
repositories {
flatDir {
dirs 'libs' //this way we can find the .aar file in libs folder
}
}
dependencies {
.
.
implementation (name:'core-release',ext:'aar')
.
}
- 同步一下工程,即可开始使用该库了。
- 通过本地Maven库(文件方式)
- Library下的build.gradle中添加maven插件
apply plugin: 'com.android.library'
apply plugin: 'maven'
- Library的build.gradle中添加maven配置
ext {
//GITHUB_REPO_PATH = "E:\\private_maven" //windows
GITHUB_REPO_PATH = "/User/ocean/private_maven" //Mac
PUBLISH_GROUP_ID = 'com.ocean'
PUBLISH_ARTIFACT_ID = 'core'
PUBLISH_VERSION = '1.0.0'
}
/** uploadArchives,运行生成aar包 */
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
}
repositories {
mavenCentral()
}
- 配置完成以后,在Terminal运行 gradlew uploadArchives,也可在gradle中的upload目录中找到uploadArchives,右键Run也可以。执行完成后即可在配置的本地路径中看到上传的库,即/User/ocean/private_maven/目录下
- 在需要引用该库的项目根目录的build.gradle中配置如下:
allprojects {
repositories {
google()
jcenter()
maven {url "file://Users/ocean/private_maven"}
}
}
- 在app/build.gradle,正常引用依赖即可
dependencies {
implementation 'com.ocean:core:1.0.0'
}
- 通过本地Maven库(私服方式)
以下配置均基于Mac系统
1.下载Nexus 官网下载地址
需要输入一个邮箱地址,然后点击Download,跳转到下载页面
我下载的是nexus-3.26.1-02-mac 2.解压后有两个目录,nexus-3.26.1-02和sonatype-work目录,拷贝到/Users/ocean/目录下,获取其它你喜欢的目录都可以。 进入到nexus下的bin目录,执行nexus命令后显示Starting nexus
MBP:bin $ ./nexus start
Starting nexus
-
如果启动成功,打开 http://localhost:8081,默认用户名:admin 密码在sonatype-work/nexus3/admin.password文件中,登录后会让修改密码,修改后,admin.password会被自动删除
-
创建Repositories 如下图位置,点击Create repository按钮
-
在下图列表选择maven2(hosted)
-
输入Name,即库的名称,并且修改Hosted 的 Deployment policy:选择Allow redeploy,其他选项默认即可。点击Create repository进行创建
-
创建成功后即可在列表看到刚刚创建的库
点击copy复制本库的地址:http://localhost:8081/repository/core/,在gradle配置中将会用到这个地址
-
配置gradle 在需要发布的module下新建一个nexus_maven.gradle
apply plugin: 'maven'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://localhost:8081/repository/core/") {
authentication(userName: "admin", password: "admin")
}
pom.project {
name 'core'
version '1.0.0'
artifactId 'core'
groupId 'com.xx'
packaging 'aar'
description 'library for awesome app'
}
}
}
}
在module 下的build.gradle文件最后添加
apply from: 'nexus_maven.gradle'
同步工程后,即可在gradle窗口中看到uploadArchives任务
右键运行该task即可上传到刚刚创建的maven库地址中,点击Browse后如下图
点击即可看到库的内容
9.库的使用
在项目根目录的build.gradle中添加如下配置
allprojects {
repositories {
google()
jcenter()
maven {url "http://localhost:8081/repository/core/"}
}
}
然后在使用该库的app/build.gradle中添加依赖即可
dependencies {
implementation 'com.xx:core:1.0.0'
}
至此本地Maven库的创建和使用都完成了。希望对你有所帮助。