Android Library 发布到 Jcenter 库
将 Android Library 发布到 Jcenter 库
专注于Android开发,分享经验总结,欢迎加入
Android Studio , build.gradle 集成依赖包,方便快捷,只需一行代码就可以搞定,如下:
implementation “com.squareup.retrofit2:retrofit:2.9.0”
打开项目的build.gradle,能看到如下配置
repositories {
google()
jcenter()
mavenCentral()
}
Android 中依赖库有 google , maven , jcenter , 今天给大家讲讲如何将自己的项目发布到 jcenter 上
- 1.首先打开网址:https://bintray.com/ 注册账号
点击去注册
账号注册完成后进去新建一个 repository
新建 repository
- 2.新建项目将 Android Studio 项目发布到 Jcenter 库中
借助于: https://github.com/bintray/gradle-bintray-plugin
* 首先在项目的 build.gradle 中配置如下
dependencies 中加入
classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5”
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
// Gradle Bintray Plugin
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5"
}
再加入
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
allprojects {
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}
项目 build.gradle 完整配置
apply from: "config.gradle"
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
// Gradle Bintray Plugin
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5"
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
allprojects {
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
依赖包 build.gradle 配置
/*************************** bintray start ***************************/
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user") // Bintray 用户名
key = properties.getProperty("bintray.apikey") // Bintray ApiKey
configurations = ['archives']
pkg {
// 项目简介
repo = rootProject.ext.bintray_repoName // 仓库名称
userOrg = rootProject.ext.bintray_userOrg // 用户名
name = rootProject.ext.bintray_groupId // 项目名称
desc = rootProject.ext.bintray_project_desc // 项目描述
issueTrackerUrl = rootProject.ext.bintray_issueTrackerUrl // issue 网址
websiteUrl = rootProject.ext.bintray_website // git 网址
vcsUrl = rootProject.ext.bintray_gitUrl // git 网址
licenses = rootProject.ext.bintray_licenses // 协议
labels = rootProject.ext.bintray_labels // 标签
publish = true // 是否是公开项目
version {
name = rootProject.ext.bintray_publishVersion // 版本号 1.0.0
desc = rootProject.ext.bintray_version_desc // 版本描述
released = new Date()
vcsTag = 'v' + rootProject.ext.bintray_publishVersion // v1.0.0
attributes = rootProject.ext.bintray_attributes
}
}
}
install {
repositories.mavenInstaller {
// 生成pom.xml和参数
pom.project {
packaging rootProject.ext.bintray_packaging
name rootProject.ext.bintray_artifactId// 项目名称
description rootProject.ext.bintray_project_desc // 项目描述
url rootProject.ext.bintray_website // 项目主页
// 软件开源协议,一般都是Apache License2.0
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
//填写开发者基本信息
developers {
developer {
id rootProject.ext.bintray_developer_id
name rootProject.ext.bintray_developer_name
email rootProject.ext.bintray_developer_email
}
}
scm {
connection rootProject.ext.bintray_gitUrl // Git仓库地址
developerConnection rootProject.ext.bintray_gitUrl // Git仓库地址
url rootProject.ext.bintray_website // 项目主页
}
}
}
}
// 生成jar包的task
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
// 生成jarDoc的task
task javadoc(type: Javadoc) {
failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
// 生成javaDoc的jar
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
// archives javadocJar
archives sourcesJar
}
/*************************** bintray end ***************************/
此配置调用的变量全部来自 config.gradle 中
config.gradle 配置
// jcenter push config
bintray_userOrg = 'xxxxxx'// 用户名
bintray_repoName = 'taxiao'// 远程仓库名称
bintray_groupId = 'com.taxiao.library'// groupId 名称
bintray_artifactId = 'common-library'// 项目名称
bintray_publishVersion = versionName// 版本号
bintray_project_desc = 'Android Dependent library MVP'// 项目描述
bintray_version_desc = 'version 1.0.0'// 项目描述
bintray_website = 'https://github.com/taxiao213/common_library'// 项目主页
bintray_gitUrl = 'https://github.com/taxiao213/common_library.git'// Git仓库的地址
bintray_issueTrackerUrl = 'https://github.com/taxiao213/common_library/issues'// issues地址
bintray_labels = ["Tools", "Library", "Java", "Android"]// 标签
bintray_licenses = ["Apache-2.0"] // 协议
bintray_attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
bintray_packaging = 'aar'
// developer info
bintray_developer_id = 'taxiao'// 开发者 id
bintray_developer_name = 'taxiao'// 开发者姓名
bintray_developer_email = 'yin13753884368@163.com'// 开发者邮箱
需要注意的地方,新建的依赖库名称要和 bintray_artifactId 一致
这两处很重要记得配置
// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号
一般的依赖包都是 xyz 这种方式,x 是 group, y 是 bintray_artifactId,z 是 bintray_publishVersion
比如我自己的依赖包: implementation ‘com.taxiao.library:common-library:1.0.0’
依赖包的完整配置 build.gradle
apply plugin: 'com.android.library'
/*************************** bintray start ***************************/
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user") // Bintray 用户名
key = properties.getProperty("bintray.apikey") // Bintray ApiKey
configurations = ['archives']
pkg {
// 项目简介
repo = rootProject.ext.bintray_repoName // 仓库名称
userOrg = rootProject.ext.bintray_userOrg // 用户名
name = rootProject.ext.bintray_groupId // 项目名称
desc = rootProject.ext.bintray_project_desc // 项目描述
issueTrackerUrl = rootProject.ext.bintray_issueTrackerUrl // issue 网址
websiteUrl = rootProject.ext.bintray_website // git 网址
vcsUrl = rootProject.ext.bintray_gitUrl // git 网址
licenses = rootProject.ext.bintray_licenses // 协议
labels = rootProject.ext.bintray_labels // 标签
publish = true // 是否是公开项目
version {
name = rootProject.ext.bintray_publishVersion // 版本号 1.0.0
desc = rootProject.ext.bintray_version_desc // 版本描述
released = new Date()
vcsTag = 'v' + rootProject.ext.bintray_publishVersion // v1.0.0
attributes = rootProject.ext.bintray_attributes
}
}
}
install {
repositories.mavenInstaller {
// 生成pom.xml和参数
pom.project {
packaging rootProject.ext.bintray_packaging
name rootProject.ext.bintray_artifactId// 项目名称
description rootProject.ext.bintray_project_desc // 项目描述
url rootProject.ext.bintray_website // 项目主页
// 软件开源协议,一般都是Apache License2.0
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
//填写开发者基本信息
developers {
developer {
id rootProject.ext.bintray_developer_id
name rootProject.ext.bintray_developer_name
email rootProject.ext.bintray_developer_email
}
}
scm {
connection rootProject.ext.bintray_gitUrl // Git仓库地址
developerConnection rootProject.ext.bintray_gitUrl // Git仓库地址
url rootProject.ext.bintray_website // 项目主页
}
}
}
}
// 生成jar包的task
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
// 生成jarDoc的task
task javadoc(type: Javadoc) {
failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
// 生成javaDoc的jar
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
// archives javadocJar
archives sourcesJar
}
/*************************** bintray end ***************************/
def support = rootProject.ext.commonDependencies
def annotation = rootProject.ext.annotationProcessor
android {
compileSdkVersion rootProject.compileSdkVersion
defaultConfig {
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
versionCode rootProject.versionCode
versionName rootProject.versionName
}
buildTypes {
release {
minifyEnabled false
consumerProguardFiles 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
support.each { k, v -> api v }
annotation.each { k, v -> annotationProcessor v }
}
-
3.项目配置完成后 依次执行如下命令:
gradlew clean
gradlew install
gradlew bintrayUpload
gradlew clean
gradlew install
gradlew bintrayUpload
- 错误最多的就是第三个,常见错误如下:
Could not upload to ‘https://api.bintray.com/content/yin13753884368/taxiao/com.taxiao.cn/1.0.0/common_library/common-library/unspecified/common-library-unspecified.pom’: HT
TP/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 ‘common_library/common-library/uns
pecified/common-library-unspecified.pom’]
报 404 这个问题,困扰我好长时间,解决方案:依赖库的名称 和 rootProject.ext.bintray_artifactId 需要一致
-
- gradlew bintrayUpload 执行完提示 successful ,说明上传成功
- 5.上传完成后,将依赖包上传到 jcenter 库,大概 2 小时左右会出结果
- 6.如果未上传到 Jcenter 库 ,要用时需要这样去配置
在 Andoid build.gradle 配置:
repositories {
google()
jcenter()
mavenCentral()
maven{url "https://dl.bintray.com/yin13753884368/taxiao/" }
}
然后再去依赖依赖包 build.gradle 配置:
[implementation ‘com.taxiao.library:common-library:1.0.0’]
- 7.上传到 Jcenter 后,build.gradle 配置:
[implementation ‘com.taxiao.library:common-library:1.0.0’]
源码查看,关注公众号回复 jcenter ,获取
微信公众号 -->> 他晓 (欢迎加入)
本文地址:https://blog.csdn.net/yin13753884368/article/details/107993920
推荐阅读
-
Android Studio发布项目到Jcenter仓库步骤(图文)
-
android 拷贝sqlite数据库到本地sd卡的方法
-
Android编程实现将压缩数据库文件拷贝到安装目录的方法
-
Android Studio导入library项目开源库的图文教程
-
android 拷贝sqlite数据库到本地sd卡的方法
-
Android编程实现将压缩数据库文件拷贝到安装目录的方法
-
Android 数据库打包随APK发布的实例代码
-
Vue cli3 库模式搭建组件库并发布到 npm的流程
-
Android Studio导入library项目开源库的图文教程
-
使用Jitpack发布自己的Android Library