如何使用AndroidStudio上传Library到JCenter - 小白教程

一、前言

该篇文章主要是面向使用AndroidStudio开发Android且有开源精神的小伙伴们~
环境:Windows 7 + AndroidStudio 2.3.3
第二部分会直接开始从0开始直到上传jcenter成功
第三部分会说如何更新Library版本
第四部分会贴一些大家在上传可能遇到的问题及解决办法
笔者我是于2017.12.14测试上传完成~

《如何使用AndroidStudio上传Library到JCenter - 小白教程》

二、步骤

  1. 注册Bintray账号
    这里是Bintray的官方网站:https://bintray.com/
    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 Bintray.png
    这里我们要注意:很多人都会误点绿色的那个按钮,然后注册成了一个组织!这里我们是要去注册个人账户,应该点击图中的地方

《如何使用AndroidStudio上传Library到JCenter - 小白教程》 Regist.png

填写注册页面要注意:很多人注册不了,多是因为邮箱是不支持的,推荐使用gmail邮箱,若你有Google账户也可以直接通过Google账号注册或者使用Github注册

注册完成之后会自动跳转到这个页面,这样你的Bintray账号注册已经完成:

《如何使用AndroidStudio上传Library到JCenter - 小白教程》 index.png

  1. 添加仓库

    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 step1 添加仓库.png

《如何使用AndroidStudio上传Library到JCenter - 小白教程》 step2 填写仓库信息.png
《如何使用AndroidStudio上传Library到JCenter - 小白教程》 step3 添加包.png

《如何使用AndroidStudio上传Library到JCenter - 小白教程》 step4 为了方便大家理解,我翻译成了中文(带*为必填项).png

添加仓库这里需要大家注意: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 'hacker_maple@163.com'
                    }
                }
                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

《如何使用AndroidStudio上传Library到JCenter - 小白教程》 step1.png
《如何使用AndroidStudio上传Library到JCenter - 小白教程》 step2.png

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文件看到会生成如下内容:

    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 show.png

  • b.若上一步无问题,则我们可以开始上传jar包到Bintray
    执行命令:
    Windows 环境下: gradlew bintrayUpload
    Mac 环境下: ./gradlew bintrayUpload
    当命令滚动到 BUILD SUCCESSFUL 说明上传成功,然后你可以登录Bintray查看你的包就可以开始去添加到JCenter上面了

  • c.若前两部无问题,我们这一步就该开始把jar包添加到JCenter了
    点击进入你的包详情

    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 add jcenter.png

    填写包的简单介绍

    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 send.png

    • d.审核成功后

      《如何使用AndroidStudio上传Library到JCenter - 小白教程》 image.png

      如果审核通过了,我们就可以在项目中去远程依赖了~

三、更新版本

更新版本之前,最好要确保你的代码都上传完整,能够达到你的更新要求。
更新这一步极其简单,步骤如下:

  • a. 完成版本更新的代码修改或添加
  • b. 重复第二部分的第3节步骤(gradlew 安装编译上传步骤)
  • c. 若无问题,便可以登录Bintary查看上传记录了。
    注意:只要你的library通过了jcenter的审核,更新之后就不用再次add jcenter,直接引入就可以使用了~

四、以上步骤中可能会遇到的问题

按道理来说,按照以上的步骤一步步来 是完全没问题的,不过有时候粗心少填或填错一些内容也不好排查,以下我整理一下容易遇见的问题

  1. 错误: 编码GBK的不可映射字符->请正确配置javadoc编码
    在项目下的build.gradle 下添加如下,将中文注释改成英文,别问我怎么知道的~

    tasks.withType(Javadoc) {
    options.addStringOption('Xdoclint:none', '-quiet')
    options.addStringOption('encoding', 'UTF-8')
    }
    
  2. Could not create version ‘0.1’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication]
    原因:没有正确配置API key,检查app项目下local.properties的bintray.apikey是否正确

  3. Could not create package ‘fighter/xxx/xxx’: HTTP/1.1 404 Not Found [message:Repo ‘xxx’ was not found]
    原因:这个错误的原因是因为在网站直接创建的包,然后本地项目和网站的包信息匹配错误,请参考下图对照:

    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 image1.png
    《如何使用AndroidStudio上传Library到JCenter - 小白教程》 image2.png

    图2中红色框中的UserOrg 、repo 、name必须和图1从左到右的红框的名字一样~
    图2 pkg{}中就是包的所有配置,可以一一比对一下有什么异常没有!

  4. 找不到Add to JCenter按钮,如果是这个问题的同学,恭喜你,你注册成为了一个组织,请你向上滚动看文章开篇的注册方式,点击上面的链接重新注册~

  5. 403 [message:forbidden] 这种情况往往出现在粗心的同学把项目中的部分配置字段写错了,如大小写、单词错误等~(如:userOrg写成了UserOrg)

    原文作者:码农大表哥
    原文地址: https://www.jianshu.com/p/cb76422a8be7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞