You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle发布Android库及AAR报错:无操作,publish任务被跳过

解决Gradle发布Android Library时“publish任务无action”的问题

我来帮你搞定这个头疼的发布问题!遇到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:28:48