需求及问题描述
需求:把lib module打成一个包 提供给第三方,依赖方式可以是maven依赖也可以是本地aar文件。
问题:我的lib module中引用了第三方的本地库和一些远程库,正常的打包方式无法把这些嵌套的库打进去。
解决方案
借助第三方打包插件:fat-aar-android 插件使用方法:
一 、Apply plugin
添加以下代码到你工程根目录下的build.gradle文件中:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.kezong:fat-aar:1.2.12'
} }
添加以下代码到你的主library的build.gradle中:
apply plugin: 'com.kezong.fat-aar'
二、Embed dependencies
修改嵌套依赖方式
dependencies {
implementation fileTree(dir: 'libs', include: '*.jar')
// java dependency
embed project(path: ':lib-java', configuration:'default')
// aar dependency
embed project(path: ':lib-aar', configuration:'default')
// local full aar dependency, just build in flavor1
flavor1Embed project(path: ':lib-aar-local', configuration:'default')
// local full aar dependency, just build in debug
debugEmbed (name:'lib-aar-local2',ext:'aar')
// local full aar dependency
embed (name:'lib-aar-local3',ext:'aar')
local full aar dependency only compile,不会打包进去
embed files('libs/hjffmpeg-1.0.2.aar')
// remote jar dependency
embed 'com.google.guava:guava:20.0'
// remote aar dependency
embed 'com.facebook.fresco:fresco:1.11.0'
// don't want to embed in
// 不建议使用implementation,因为该依赖可能与application的依赖版本不一致,使用implementation可能会导致R类找不到的问题
compileOnly 'com.android.support:appcompat-v7:27.1.1' }
三、打包aar
1.打包成本地aar包
运行gradlew assemble 命令即可,会在build目录中生成aar文件。
2.上传maven
1.gradle.properties中添加:
GROUP_ID=com.cui.demo
POM_ARTIFACT_ID=libname
LOCAL_REPO_URL=http://nexus.cui.net/repository/mymaven/
LOCAL_REPO_URL_SNAP_SHOT=http://nexus.cui.net/repository/mymaven-Snapshot/
USER_NAME=cui
PASSWORD=cui
maven_pom__packaging=aar
maven_pom__description=test upload
2.lib module build.gradle中添加:
apply plugin: 'maven'
android{
defaultConfig {
minSdk 21
targetSdk 27
versionCode 1
versionName "1.0.0"
ndk {
abiFilters = ['armeabi-v7a']
}
}
}
// type显示指定任务类型或任务, 这里指定要执行Javadoc这个task,这个task在gradle中已经定义
task androidJavadocs(type: Javadoc) {
// 设置源码所在的位置
source = android.sourceSets.main.java.sourceFiles
}
// 生成javadoc.jar
task androidJavadocsJar(type: Jar) {
// 指定文档名称
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
// 生成sources.jar
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
// 产生相关配置文件的任务
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
//上传 到 maven 的任务
uploadArchives {
repositories.mavenDeployer {
repository(url: project.LOCAL_REPO_URL) {
authentication(userName: project.USER_NAME, password: project.PASSWORD)
}
snapshotRepository(url: project.LOCAL_REPO_URL_SNAP_SHOT) {
authentication(userName: project.USER_NAME, password: project.PASSWORD)
}
pom.project {
// 注意:【这里通过切换 versionName 的赋值来区分上传快照包还是正式包(snapshot 版本必须以 -SNAPSHOT 结尾)】
version android.defaultConfig.versionName+'-SNAPSHOT'
// version android.defaultConfig.versionName
artifactId POM_ARTIFACT_ID
groupId GROUP_ID
packaging maven_pom__packaging
description maven_pom__description
}
}
}
执行gradlew uploadArchives 即可。
|