我们在做组件化的时候经常遇到这样的场景(maven私有化默认您已经了解或者搭建完成):
我们有一个自己开发维护的Android Module(SDK)内部引用了一个(多个)第三方的aar,当我们打包自己的SDK并上传maven时,引用的aar并不会打包到最终的aar里。
思路是将aar先打包上传至maven,然后自己的module去引用,然后最终打包,我们自己的SDK中的pom.xml就会引用依赖的三方maven地址
本案例使用的是:android studio chipmunk 版本,其他版本入口展示可能不同
在android studio中新建 java-library 类型的 module
将需要上传的aar放在libs下
在当前module的build.gradle
文件中做类似如下处理
plugins {
id 'java-library'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
//上传到maven
apply plugin: 'maven'
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!下面AAR的文件名改成你放到libs文件夹里的文件名
def coreAarFile = file('libs/AMap3DMap_9.3.1_AMapSearch_9.3.1_AMapLocation_6.1.0_20220704.aar')
artifacts {
archives coreAarFile
}
uploadArchives {
repositories {
mavenDeployer {
//!!!!!!!!!!!!!!!!!!!!!!!!!!这里配置上传到maven仓库后的 groupId、artifactId、version
repository(url: "http://172.17.230.145:8081/artifactory/libs-release-local/")
pom.version = "9.3.1"
pom.artifactId = "godmap"
pom.groupId = "com.sdk.components"
pom.packaging = "aar"
}
}
}
然后会在maven中看到上传的资源:
最后在自己开发的module(SDK)中引入资源
注意:要引用其.aar
类型的包
会发现自己开发的module(SDK)上传maven后其pom如下:
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0modelVersion>
<groupId>com.sdk.componentsgroupId>
<artifactId>ArcMapartifactId>
<version>1.1.6version>
<packaging>aarpackaging>
<description>更新SDK 支持不同地图控件description>
<dependencies>
<dependency>
<groupId>com.sdk.componentsgroupId>
<artifactId>godmapartifactId>
<version>9.3.1version>
<type>aartype>
<scope>compilescope>
<exclusions>
<exclusion>
<artifactId>*artifactId>
<groupId>*groupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>androidx.appcompatgroupId>
<artifactId>appcompatartifactId>
<version>1.3.0version>
<scope>compilescope>
dependency>
<dependency>
<groupId>androidx.recyclerviewgroupId>
<artifactId>recyclerviewartifactId>
<version>1.2.1version>
<scope>compilescope>
dependency>
dependencies>
project>
如果包含多个aar也是一样,建多个java-library的module,分别上传到maven,宿主module分别重新引用