使用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
相关产品推荐
相关产品推荐

