一、前言
该篇文章主要是面向使用AndroidStudio开发Android且有开源精神的小伙伴们~
环境:Windows 7 + AndroidStudio 2.3.3
第二部分会直接开始从0开始直到上传jcenter成功
第三部分会说如何更新Library版本
第四部分会贴一些大家在上传可能遇到的问题及解决办法
笔者我是于2017.12.14测试上传完成~
二、步骤
- 注册Bintray账号
这里是Bintray的官方网站:https://bintray.com/
这里我们要注意:很多人都会误点绿色的那个按钮,然后注册成了一个组织!这里我们是要去注册个人账户,应该点击图中的地方
填写注册页面要注意:很多人注册不了,多是因为邮箱是不支持的,推荐使用gmail邮箱,若你有Google账户也可以直接通过Google账号注册或者使用Github注册
注册完成之后会自动跳转到这个页面,这样你的Bintray账号注册已经完成:
-
添加仓库
添加仓库这里需要大家注意:step3 - step4 是直接在线通过网站生成包,这一步不是必须的。
若通过step3 - step4生成包,可以直接通过包名 和你的账号信息上传代码
若不经过step3 - step4 ,我们通过AndroidStudio上传时候,Bintray会自动为我们创建~
3.配置项目信息
- a.配置app项目下的build.gradle配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
//上传bintray需要的插件
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
}
// 防止中文乱码
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- b. 配置library Module的build.gradle
apply plugin: 'com.android.library'
// 版本号,下次更新是只需要更改版本号即可
version "1.0.0"
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "${version}"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//这里要添加 去除代码规范报错
lintOptions {
abortOnError false
}
}
allprojects {
repositories {
jcenter()
}
//加上防止中文错乱 报错
tasks.withType(Javadoc) {
options{ encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
//项目主页
def siteUrl = 'https://github.com/AnthonyCoder/CustomCamera' // project homepage
//项目的版本控制地址
def gitUrl = 'https://github.com/AnthonyCoder/CustomCamera.git' // project git
//发布到组织名称名字,必须填写
group = "cn.geek.anthony"
//发布到JCenter上的项目名字,必须填写
def libName = "CustomCamera"
//生成源文件
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
//生成文档
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
options.encoding "UTF-8"
options.charSet 'UTF-8'
options.author true
options.version true
failOnError false
}
//文档打包成jar
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
//拷贝javadoc文件
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}
//上传到jcenter所需要的源码文件
artifacts {
archives javadocJar
archives sourcesJar
}
// 配置maven库,生成POM.xml文件
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'This is a rapidly used custom camera library'
url siteUrl
licenses {
license {
name 'This is a rapidly used custom camera library'
url 'https://github.com/AnthonyCoder/CustomCamera'
}
}
developers {
developer {
id 'anthonyCoder'
name 'anthonycode'
email '[email protected]'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
//上传到jcenter
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user") //读取 local.properties 文件里面的 bintray.user
key = properties.getProperty("bintray.apikey") //读取 local.properties 文件里面的 bintray.apikey
configurations = ['archives']
pkg {//这里就是我们的包的初始信息!!
userOrg = "anthonycode" //对应JCenter的你的组织或个人名字
repo = "maven" //对应JCenter的你的库名
name = libName //对应JCenter上的项目(包)名字,必须填写
desc = 'This is a rapidly used custom camera library' //项目描述
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
- c. app项目下local.properties的配置
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Mon Nov 20 11:48:35 CST 2017
ndk.dir=D\:\\android-sdk\\ndk-bundle
sdk.dir=D\:\\android-sdk
bintray.user=这里是bintray的注册账号
bintray.apikey=这里是bintray的apikey
如何查看ApiKey
3.gradlew 安装编译上传步骤
mac环境下使用gradlew命令如./gradlew install命令,若出现类似Permission Denied提示,则试试加上执行标志,命令为:chmod +x gradlew install
若mac环境还是有问题,请检查adb环境是否配置成功:adb version 命令试试能不能看到adb版本,解决方案
-
a.安装命令:
Windows环境下 : gradlew install
Mac环境下 : ./gradlew install当命令滚动到 BUILD SUCCESSFUL则执行成功
成功后会在build文件看到会生成如下内容:
b.若上一步无问题,则我们可以开始上传jar包到Bintray
执行命令:
Windows 环境下: gradlew bintrayUpload
Mac 环境下: ./gradlew bintrayUpload
当命令滚动到 BUILD SUCCESSFUL 说明上传成功,然后你可以登录Bintray查看你的包就可以开始去添加到JCenter上面了-
c.若前两部无问题,我们这一步就该开始把jar包添加到JCenter了
点击进入你的包详情
填写包的简单介绍
-
d.审核成功后
如果审核通过了,我们就可以在项目中去远程依赖了~
-
三、更新版本
更新版本之前,最好要确保你的代码都上传完整,能够达到你的更新要求。
更新这一步极其简单,步骤如下:
- a. 完成版本更新的代码修改或添加
- b. 重复第二部分的第3节步骤(gradlew 安装编译上传步骤)
- c. 若无问题,便可以登录Bintary查看上传记录了。
注意:只要你的library通过了jcenter的审核,更新之后就不用再次add jcenter,直接引入就可以使用了~
四、以上步骤中可能会遇到的问题
按道理来说,按照以上的步骤一步步来 是完全没问题的,不过有时候粗心少填或填错一些内容也不好排查,以下我整理一下容易遇见的问题
-
错误: 编码GBK的不可映射字符->请正确配置javadoc编码
在项目下的build.gradle 下添加如下,将中文注释改成英文,别问我怎么知道的~tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') options.addStringOption('encoding', 'UTF-8') }
Could not create version ‘0.1’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication]
原因:没有正确配置API key,检查app项目下local.properties的bintray.apikey是否正确-
Could not create package 'fighter/xxx/xxx': HTTP/1.1 404 Not Found [message:Repo 'xxx' was not found]
原因:这个错误的原因是因为在网站直接创建的包,然后本地项目和网站的包信息匹配错误,请参考下图对照:
图2中红色框中的UserOrg 、repo 、name必须和图1从左到右的红框的名字一样~
图2 pkg{}中就是包的所有配置,可以一一比对一下有什么异常没有! 找不到Add to JCenter按钮,如果是这个问题的同学,恭喜你,你注册成为了一个组织,请你向上滚动看文章开篇的注册方式,点击上面的链接重新注册~
403 [message:forbidden] 这种情况往往出现在粗心的同学把项目中的部分配置字段写错了,如大小写、单词错误等~(如:userOrg写成了UserOrg)