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

使用maven-publish发布Android库时classes.jar为空的问题求助

Android库maven-publish发布后classes.jar为空的解决方案

核心原因分析

你的问题核心在于Android库模块的maven-publish配置未正确关联AGP生成的编译产物,或编译/混淆环节导致代码被移除,同时发布任务未声明明确输出(对应publishReleasePublicationToGitHubPackagesRepository is not up-to-date because Task has not declared any outputs despite executing actions提示)。

分步解决方案

1. 修正maven-publish配置,正确关联Android变体

AGP 8.x版本中,maven-publish需要在afterEvaluate块内配置,确保能获取到AGP生成的构件组件。以下是Groovy配置示例(Kotlin DSL可对应调整):

plugins {
    id 'com.android.library'
    id 'org.jetbrains.kotlin.android'
    id 'maven-publish'
}

// 导入你的defaultAndroidConfig.gradle
apply from: '../defaultAndroidConfig.gradle'

android {
    buildTypes {
        release {
            // 优先关闭混淆测试,排除混淆导致的代码丢失
            minifyEnabled false
            // 若需开启混淆,必须添加保留库代码的规则
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                // 关键:绑定Android Release变体的所有产物
                from components.release

                // 按需配置发布坐标(也可在根项目统一配置)
                groupId = '你的组ID'
                artifactId = 'android-lib'
                version = '你的版本号'
            }
        }
        repositories {
            // 你的远程仓库配置(比如GitHub Packages)
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/你的用户名/你的仓库名")
                credentials {
                    username = System.getenv("GITHUB_USERNAME")
                    password = System.getenv("GITHUB_TOKEN")
                }
            }
        }
    }
}

关键说明:

  • afterEvaluate块必须添加:AGP的components.release是在配置阶段后期生成的,提前配置会无法找到该组件
  • from components.release:自动关联Release变体的classes.jar、资源、Manifest等所有产物,解决发布任务无输出的问题

2. 排查混淆导致的代码丢失

如果开启了minifyEnabled true,需检查proguard-rules.pro是否保留了库的公共代码,示例规则:

// 保留你的库包下所有类和方法(根据实际包名调整)
-keep public class com.your.library.package.** { *; }

// 若使用Kotlin,需保留Kotlin元数据
-keepclassmembers class ** {
    kotlin.Metadata <methods>;
}

3. 验证本地编译产物是否正常

先执行编译任务确认本地产物状态:

./gradlew :android-lib:assembleRelease

前往模块的build/outputs/aar/目录,解压生成的android-lib-release.aar,查看内部的classes.jar:

  • 若classes.jar为空:说明编译或混淆环节有问题,检查compileReleaseKotlin/compileReleaseJavaWithJavac任务是否正常执行,或混淆规则是否有误
  • 若classes.jar有内容:说明maven-publish配置未正确关联产物,回到步骤1修正配置

验证修复效果

重新执行发布命令:

./gradlew :android-lib:publish --info

若之前的Task has not declared any outputs提示消失,说明配置已正确关联输出,发布后的classes.jar会包含正常代码。


内容的提问来源于stack exchange,提问作者Luja93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:41:04