Android Library 上传到 JCenter 之图文总结
前言
本篇博客暂先粗略的总结一下 Jcenter 发布的过程和坑。
注册
刚要跨出第一步就绊倒在注册这一步。
公司试用版和个人免费版注册地址:https://bintray.com/
切记一定要选择右边这个 Sign Up Here 按钮,不管你是否用 github 第三方登录,并且注册的邮箱不能使用网易和腾讯邮箱!
发布
点击上图的 Add New Repository 按钮,创建存放代码的仓库。
创建完仓库后继续创建Package 
到此,仓库和Package 已经创建完毕,下面配置要上传的项目 (Library) 信息后就可以上传到该仓库了。
配置项目信息
这里我们用极简的拿来主义配置项目~
1.配置根目录的build
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
}
}
2.配置模块的build
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
}
apply from: 'bintray-config.gradle'
3.创建Jcenter配置文件
在要上传的module目录下,与 build.gradle 文件同级 创建 bintray-config.gradle 文件,内容如下。
ext {
bintrayRepo = 'repository' //仓库名
bintrayName = 'package' //pack名
//例如build.gradle可以使用依赖 :com.example.uploadmodule:uploadmodule:1.0.1
publishedGroupId = 'com.example.uploadmodule' //Model Package Name
artifact = 'uploadmodule' //Model 名
libraryVersion = '1.0.0' //Model 版本号
//开源库的描述
libraryName = 'uploadmodule'
libraryDescription = ''
siteUrl = ''
//开源库对应的 github 地址
gitUrl = ''
//开发者信息
developerId = 'xxx'
developerName = 'xxx'
developerEmail = '[email protected]'
//开源协议相关
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
4. 配置账号身份信息
在根目录的 local.properties 文件中配置用户名和秘钥
sdk.dir=C\:\\Android\\sdk
bintray.user=xxx
bintray.apikey=xxx
因为我们在 bintray-config.gradle 文件中配置了
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
这两行代码,依赖了上面两个插件,具体可以用浏览器打开查看。
主要是帮我们配置了项目信息和上传Library的配置,所以我们才可以用极简的流程上传Lib~
5. 执行gradle脚本
依次执行以下两个 gradle 命令 :
- gradlew install
- gradlew bintrayUpload
gradlew install 用于将项目编译、打包生成 pom,aar 等文件;
gradlew bintrayUpload 用于将生成的 pom,aar 等文件上传至 bintray 仓库中;
或者也可以在 Android Studio 的 Gradle 板块中搜索 install , 点击 Expand All 找到 install Task (具体在 :module -> other -> install),因为要上传的是 module 的代码~
bintrayUpload
成功上传 Library
最后在 Maven Central 中将依赖正式发布到 Jcenter 上,项目中就可以直接依赖,例如:
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
我们其实可以直接网页访问 https://jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.9.1/ 下载上传到 Jcenter 的 okhttp 模块依赖。
对于上面我们示例模块,如果上传到 Jcenter 发布后,即可在项目中如下依赖使用 :
implementation 'com.example.uploadmodule:uploadmodule:1.0.0'
对应下载链接 https://jcenter.bintray.com/com/example/uploadmodule/uploadmodule/1.0.0/
踩坑总结
- 首先注册一定要选择个人免费版!!!
- HTTP/1.1 404 Not Found [message:Repo ‘maven’ was not found] 注册为企业的账号了!!!
- Could not create version ‘0.1’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication] : 没有正确配置API key 和 账号
- Could not create package ‘fighter/xxx/xxx’: HTTP/1.1 404 Not Found [message:Repo ‘xxx’ was not found] : 项目信息配置错误,要对应仓库名,Package
- Could not upload to ‘https://xxxxxxx.pom’: HTTP/1.1 400 Bad Request [message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path ‘xxxxxxx.pom’] :module的名字和Model下gradle文件配置的artifact不一致导致的
参数说明
bintrayRepo : bintray下的仓库名
bintrayName : bintray仓库下的项目名
publishedGroupId : Model包名
libraryName : Model 名
artifact : Model 名
libraryVersion : Model版本号
‘com.example.uploadmodule:uploadmodule:1.0.0’
publishedGroupId : com.example.uploadmodule 包名
artifact : uploadmodule 模块名
libraryName : uploadmodule 开源库的描述