1. 项目概述
作为一名长期从事Android开发的工程师,我经常需要将自己的开源库发布到公共仓库供他人使用。Jcenter曾经是Android开发者最常用的Maven仓库之一,虽然现在官方已经宣布停止维护,但仍有大量历史项目依赖Jcenter上的库。今天我就来分享一下如何将Android Studio项目发布到Jcenter的完整流程。
重要提示:根据JFrog官方公告,Jcenter已于2021年3月31日转为只读仓库,不再接受新包发布。本文主要适用于需要维护历史项目或了解发布流程的开发者。
2. 准备工作
2.1 环境配置
在开始发布前,我们需要确保开发环境满足基本要求:
- Android Studio最新稳定版(推荐2023.3.1或更高版本)
- JDK 11或更高版本
- Gradle 7.0+构建工具
- 稳定的网络连接(某些步骤需要访问海外资源)
建议在项目的build.gradle文件中确认以下配置:
android {
compileSdk 34
defaultConfig {
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0.0"
// 必须配置才能生成源码和文档
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
}
}
}
// 启用Java 8特性
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}
2.2 Bintray账号注册
由于Jcenter由Bintray托管,我们需要先注册Bintray账号:
- 访问 Bintray官网
- 点击"Sign Up"注册新账号
- 完成邮箱验证
- 登录后创建组织或个人仓库
注意:Bintray已被JFrog收购,新用户可能需要通过JFrog账号系统注册。
3. 项目配置
3.1 插件引入
在项目根目录的build.gradle中添加必要的插件依赖:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.1.0'
// Jcenter发布插件
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
// Maven发布插件
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
}
}
3.2 模块配置
在需要发布的library模块的build.gradle中添加以下配置:
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// 定义项目信息
ext {
bintrayRepo = 'maven' // 仓库名称
bintrayName = 'my-library' // 项目名称
publishedGroupId = 'com.example' // 组织ID
libraryName = 'MyLibrary' // 库名称
artifact = 'mylibrary' // 构件名称
libraryDescription = 'A useful Android library' // 项目描述
siteUrl = 'https://github.com/username/my-library' // 项目网站
gitUrl = 'https://github.com/username/my-library.git' // Git地址
libraryVersion = '1.0.0' // 版本号
developerId = 'yourid' // 开发者ID
developerName = 'Your Name' // 开发者名称
developerEmail = 'your.email@example.com' // 开发者邮箱
licenseName = 'The Apache Software License, Version 2.0' // 许可证
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' // 许可证URL
allLicenses = ["Apache-2.0"] // 许可证类型
}
4. 发布流程
4.1 生成发布文件
执行以下Gradle任务生成发布所需的文件:
./gradlew install
这个任务会:
- 编译库代码
- 生成javadoc和sources jar
- 在本地Maven仓库(.m2目录)安装构件
4.2 配置Bintray认证
在local.properties文件中添加Bintray认证信息:
bintray.user=your_bintray_username
bintray.apikey=your_bintray_apikey
警告:永远不要将local.properties文件提交到版本控制系统!应该将其添加到.gitignore中。
4.3 执行发布命令
运行以下命令将库发布到Bintray:
./gradlew bintrayUpload
如果一切顺利,你会在控制台看到类似这样的输出:
> Task :library:bintrayUpload
Uploading to https://api.bintray.com/content/yourusername/maven/com/example/mylibrary/1.0.0/...
Uploaded to 'https://api.bintray.com/content/yourusername/maven/com/example/mylibrary/1.0.0/mylibrary-1.0.0-sources.jar'
Uploaded to 'https://api.bintray.com/content/yourusername/maven/com/example/mylibrary/1.0.0/mylibrary-1.0.0.aar'
Uploaded to 'https://api.bintray.com/content/yourusername/maven/com/example/mylibrary/1.0.0/mylibrary-1.0.0.pom'
Uploaded to 'https://api.bintray.com/content/yourusername/maven/com/example/mylibrary/1.0.0/mylibrary-1.0.0-javadoc.jar'
5. 提交到Jcenter
发布到Bintray后,还需要手动提交到Jcenter:
- 登录Bintray网站
- 进入你刚发布的包页面
- 点击"Add to JCenter"按钮
- 填写简要说明后提交
通常需要等待1-2个工作日审核通过。通过后,你的库就可以通过jcenter()仓库引用了。
6. 常见问题解决
6.1 认证失败
错误信息:
Could not create package 'maven/com/example/mylibrary': HTTP/1.1 401 Unauthorized
解决方案:
- 确认bintray.user和bintray.apikey正确
- API Key可以在Bintray的"Edit Profile" → "API Key"中找到
- 确保local.properties文件位置正确
6.2 重复发布
错误信息:
HTTP/1.1 409 Conflict [message:Unable to upload files: An artifact with the path 'com/example/mylibrary/1.0.0/mylibrary-1.0.0.pom' already exists]
解决方案:
- 在Bintray上删除已存在的版本
- 或者升级版本号重新发布
6.3 依赖解析失败
发布成功后其他项目无法解析依赖:
- 确认已成功提交到Jcenter并审核通过
- 检查依赖声明是否正确:
implementation 'com.example:mylibrary:1.0.0'
- 确保项目build.gradle中包含jcenter()仓库(虽然不推荐新项目使用)
7. 迁移建议
由于Jcenter已停止维护,建议开发者迁移到Maven Central:
- 注册Sonatype账号
- 申请Group ID
- 使用signing插件对构件签名
- 通过staging流程发布
迁移到Maven Central的主要优势:
- 更稳定的基础设施
- 更严格的审核机制
- 更广泛的生态系统支持
8. 发布后的维护
成功发布后,还需要注意以下事项:
- 版本管理:遵循语义化版本规范(SemVer)
- 变更日志:维护CHANGELOG.md文件
- 文档更新:确保README反映最新API
- 问题跟踪:及时响应GitHub Issues
对于多模块项目,可以考虑使用Gradle的复合构建或版本目录来简化依赖管理。

383

被折叠的 条评论
为什么被折叠?



