Gradle发布Android库及AAR报错:无操作,publish任务被跳过
我来帮你搞定这个头疼的发布问题!遇到publish: Error: skip task 'publish' as it has no action这种提示,本质是Gradle不知道你要发布什么内容——要么是插件没加对,要么是发布配置没跟上。下面是一步步的解决步骤:
1. 先确认正确应用了必要插件
首先,你的library模块的build.gradle(或build.gradle.kts)必须同时应用Android Library插件和Maven发布插件,缺一个都不行:
Groovy DSL 示例:
plugins { id 'com.android.library' id 'maven-publish' // 这个是核心,别漏了! }
Kotlin DSL 示例:
plugins { id("com.android.library") id("maven-publish") }
注意:别用旧版的
maven插件,一定要用maven-publish——旧插件的任务体系和新版不兼容,会导致publish任务无实际操作。
2. 配置发布内容(Publication)
光有插件还不够,你得明确告诉Gradle:我要发布这个library的AAR包!这一步是关键,很多人就是漏了这个导致任务无action。
在Android配置块之后,添加publishing配置,关联Android的release变体输出:
Groovy DSL 完整示例:
android { compileSdk 34 defaultConfig { minSdk 21 targetSdk 34 versionCode 1 versionName "1.0.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } // 重点:发布配置 publishing { publications { // 定义一个名为release的发布组件 release(MavenPublication) { // 关联Android的release变体输出(这行让publish任务有实际内容可发) from components.release // 配置你的库坐标(必填,否则发布后找不到) groupId 'com.yourcompany' // 比如你的公司域名反写 artifactId 'your-library' // 库的名称 version '1.0.0' // 版本号 } } // 可选:配置发布仓库(本地或远程) repositories { maven { // 本地仓库示例,发布后会生成在项目根目录的repo文件夹下 url = uri("$rootDir/repo") // 如果要发布到远程仓库(比如Maven Central),需要添加账号密码配置 // credentials { // username = project.findProperty("mavenUser") ?: System.getenv("MAVEN_USERNAME") // password = project.findProperty("mavenPwd") ?: System.getenv("MAVEN_PASSWORD") // } } } }
Kotlin DSL 完整示例:
android { compileSdk = 34 defaultConfig { minSdk = 21 targetSdk = 34 versionCode = 1 versionName = "1.0.0" } buildTypes { release { isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } } publishing { publications { create<MavenPublication>("release") { from(components["release"]) groupId = "com.yourcompany" artifactId = "your-library" version = "1.0.0" } } repositories { maven { url = uri("${rootDir}/repo") // 远程仓库配置同Groovy } } }
这里的核心是from components.release——它把Android编译出来的release版AAR绑定到Maven发布组件上,让publish任务知道要发布什么。
3. 验证任务是否生效
配置完后,先运行这个命令查看所有发布相关的任务:
./gradlew tasks --group=publishing
如果能看到publish任务,以及对应的publishReleasePublicationToXXXRepository任务,说明配置没问题了。
4. 清理缓存重新发布
有时候Gradle缓存会导致配置不生效,先清理一下:
./gradlew clean build --refresh-dependencies
然后再执行发布命令:
./gradlew publish
5. AGP版本注意事项
如果你用的是Android Gradle Plugin(AGP)7.0以下的版本,可能需要用variant.outputs.all来关联输出,但更推荐升级到AGP 7.0+,直接用components.release更简洁可靠。
内容的提问来源于stack exchange,提问作者eastwater

