转载是一种动力 分享是一种美德
aar引用很简单,将aar复制到libs包下,在项目的build.gradle文件中增加以下代码即可(以aarName.aar为为例):
代码语言:javascript复制compile(name:'aarName',ext:'aar')
但是如果aar中包含了远程依赖,例如aar中依赖了第三方库:
代码语言:javascript复制implementation 'com.squareup.okhttp3:okhttp:3.10.0'
若采用上面的方法引用则在运行时会找不到okhttp3 库中的类。
针对这种问题可以采用maven仓库来解决,我们可以将aar生成到本地或远程maven仓库,再引用仓库中的aar。或上传maven仓库到服务端或着私服等都可.
脚本配置如下: gradle.properties设置内容如下:
代码语言:javascript复制#版本号
versionCode=1.0
#上传artifactId名称
artifactIdName=AnyMarvel
#上传groupId名称
groupIdValue=com.anymarvel.test
#maven私服用户名
MAVEN_USERNAME=
#maven私服密码
MAVEN_PASSWORD=
# 是否使用本地maven仓库
useLocal=true
若使用本地maven仓库,需要在根目录maven引用中加入maven仓库地址引用:如
代码语言:javascript复制repositories {
maven { url "$rootDir/repo" }
google()
jcenter()
}
在module工程build.gradle脚本最下方加入如下脚本配置
代码语言:javascript复制apply plugin: 'maven-publish'publishing {
publications {
aarSDk(MavenPublication) {
artifact "build/outputs/aar/Anymarvel-debug.aar"
groupId groupIdValue
artifactId artifactIdName
version versionCode
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp -> if (dp.version != "unspecified") { // 过滤项目内library引用
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dp.group)
dependencyNode.appendNode('artifactId', dp.name)
dependencyNode.appendNode('version', dp.version) // for exclusions
if (dp.excludeRules.size() > 0) {
def exclusions = dependencyNode.appendNode('exclusions')
dp.excludeRules.each { ExcludeRule ex ->
def exclusion = exclusions.appendNode('exclusion')
exclusion.appendNode('groupId', ex.group)
exclusion.appendNode('artifactId', ex.module)
}
}
}
}
}
}
}
repositories {
maven { if (!Boolean.parseBoolean(useLocal) && project.hasProperty('MAVEN_USERNAME') && project.hasProperty('MAVEN_PASSWORD')) {
url "这里填入maven 私服地址"
credentials {
username MAVEN_USERNAME
password MAVEN_PASSWORD
}
} else {
url "$rootDir/repo"
}
}
}
}task publishToMaven(dependsOn: ['assemble', 'publish']) {
doLast { if (!Boolean.parseBoolean(useLocal)) {
println "finish publish to maven"
} else {
println "finish publish to maven directory:--> $rootDir/repo"
}
}
}
publishToMaven.setGroup('SDKPush')
点击同步gradle后在module模块下的task目录会出现如下group
双击publishToMaven 的task任务即可根据配置上传. 本地目录上传会在根目录生成repo仓库,如图所示:
其中的AnyMarvel-1.0.pom即已包含了依赖第三方内容:如下所示;
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.anymarvel.test</groupId>
<artifactId>AnyMarvel</artifactId>
<version>1.0</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>recyclerview-v7</artifactId>
<version>26.1.0</version>
</dependency>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>appcompat-v7</artifactId>
<version>26.1.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
</dependencies></project>
在使用过程中直接使用:
代码语言:javascript复制implementation('com.anymarvel.test:AnyMarvel:1.0')
会同步maven中指定的依赖库及版本,若工程中和aar中依赖版本由冲突会由报错,使用如下方法进行规避: 报错内容如下:
使用如下如下方法规避即可:
代码语言:javascript复制implementation('com.anymarvel.test:AnyMarvel:1.0') {
exclude group: 'com.android.support'
exclude group: 'com.squareup.okhttp3'
}
有问题请留言