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

一、前言

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


二、步骤

  1. 注册Bintray账号
    这里是Bintray的官方网站:https://bintray.com/
    Bintray.png

    这里我们要注意:很多人都会误点绿色的那个按钮,然后注册成了一个组织!这里我们是要去注册个人账户,应该点击图中的地方
Regist.png

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

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


index.png
  1. 添加仓库


    step1 添加仓库.png
step2 填写仓库信息.png
step3 添加包.png

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


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


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

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


    add jcenter.png

    填写包的简单介绍


    send.png
    • d.审核成功后


      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]
    原因:这个错误的原因是因为在网站直接创建的包,然后本地项目和网站的包信息匹配错误,请参考下图对照:


    image1.png

    image2.png

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342