手把手教你将Android项目开源到JCenter两种方式以及挖坑和填坑(一)

- 前言

开发中,或多或少都会用到无私的程序猿分享的开源项目,Androidstudio中使用开源也很方便
例如家喻户晓的Rxjava,只需要一句话compile 'io.reactivex:rxjava:1.1.6',就可以添加到项目中,时间久了,是不是自己也想试试开源一下自己的成果,给大家用用,获得成(zhuang)就(bi)感?
开整吧,尽量详细讲解

- 注册(第一坑)

注册本来很简单,但是在这就有大坑,在查找资料时间发现,很多人直接扔的官网注册地址,但是官网注册默认是组织,有30天试用期,之后要付费。而且发布时候各种问题,折腾大半天
所以我们需要的网址是:正确注册地址正确注册地址正确注册地址

开始注册

注册页面

注册成功之后
这时候有两种发布方式,一种是gradle-bintray-plugin,一种bintray-release

  • 本篇文章将介绍第一种gradle-bintray-plugin

第二种方法手把手教你将Android项目开源到JCenter两种方式以及挖坑和填坑(二)

1.创建一个Maven仓库,点击Add New Repository

Maven仓库.png

2.进入创建页面,可以看图操作

创建页面.png

3.设置仓库为Public,Name填写为maven,类型Type设置Maven,Default Licenses选择Apache-2.0,Description就是库的描述,自由填写,然后点击Create,稍等几秒钟,就完成创建,然后回到主页,在Add New Repository位置就可以看到创建的maven仓库

创建成功

这时候回到Androidstudio进行配置
4.在Project的build.gradle中,加入Maven和Jfrog Bintray的依赖插件

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'me.tatarka:gradle-retrolambda:3.2.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:2.0.0-alpha3'

        //添加下面两句,进行配置
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
    }
}
allprojects {
    repositories {
        jcenter()
        maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

5.然后在library的build.gradle中进行配置,例如我要开源的项目FloatingActionButton

library的build.gradle

完整的build.grale中,

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    allprojects {
        tasks.withType(Javadoc) {
            options.addStringOption('Xdoclint:none', '-quiet')
            options.addStringOption('encoding', 'UTF-8')
        }
    }

}

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:25.3.1'
    testCompile 'junit:junit:4.12'
}

//从这里开始配置

//添加这两行
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

//项目主页--项目的GitHub地址
def siteUrl = 'https://github.com/dazhaoDai/FloatingActionButton'
//项目的git地址
def gitUrl = 'https://github.com/dazhaoDai/FloatingActionButton.git'

//发布到JCenter上的项目名字,compile引用时的第2部分项目名
def libName = "FloatingActionButton"
//compile引用时的第1部分
group = "com.ddz.materialdesign"
// 版本号,//compile引用时的最后部分项目名,下次更新是只需要更改版本号即可
version = "1.0.1"
//上面配置后上传至JCenter后的编译路径是这样的: compile 'com.ddz.materialdesign:FloatingActionButton:1.0.1'

//生成源文件
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

//生成Javadoc文档
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//文档打包成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 'A customizable FloatingActionButton on Android'
                url siteUrl
                licenses {
                    license {
                        //开源协议
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        //开发者的个人信息,根据个人信息填写
                        id 'ddz'
                        name 'daidazhao'
                        email 'daidazhao@gmail.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 {
        //这里的repo值必须要和你创建Maven仓库的时候的名字一样,我们前面创建的就是maven
        repo = "maven"
        //发布到JCenter上的项目名字
        name = libName
        //项目描述
        desc = 'A customizable FloatingActionButton on Android'
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

javadoc {
    options {
        //如果你的项目里面有中文注释的话,必须将格式设置为UTF-8,不然会出现乱码
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
    }
}

6.这个时候,还差关键一步,就是设置user和apikey

Paste_Image.png

在local.properties中,添加

bintray.user=dazhao
bintray.apikey=*****************************************************

这里用到user,是之前注册的用户名,看图

user.png

而apikey,则需要我们去申请,具体步骤,点击Edit Profile,选择API KEY,根据登录密码,申请API KEY,具体流程看图

点击Edit Profile

根据登录密码,申请KEY

根据登录密码申请key

把user和apikey填到上面的local.properties文件中。配置工作就此结束

开始提交
7.第一步----打开Androidstudio的Terminal窗口,Windows系统输入gradlew install,Mac加上在前面加上./,回车,
如果成功的话会出现

BUILD SUCCESSFUL

BUILD SUCCESSFUL.png

8.然后进行第二步,输入gradlew bintrayUpload ,回车

Paste_Image.png

看到BUILD SUCCESSFUL,说明提交成功了

BUILD SUCCESSFUL

9.这个时候打开maven仓库,可以看到,已经提交成功了

提交仓库成功

现在需要最后一步,进入项目,右下角有个Add to Jcenter按钮

Paste_Image.png

10.点击打开,添加描述信息,直接点击Send,等待JCenter审核

Paste_Image.png

11.审核等待时间不太长,甚至1个小时左右就成功了,审核通过之后,Add to Jcenter按钮会消失,同时会受到消息提示

按钮消失
提示通过审核.png

至此,通过gradle-bintray-plugin方式,提交开源项目,就完成了。
我们就可以愉快的使用了自己造的轮子了

compile 'com.ddz.materialdesign:FloatingActionButton:1.0.1'

但是,说好的挖坑和填坑,肯定不会就这样:
填坑

  • 坑1

What went wrong:
Execution failed for task ':FloatingActionButton:bintrayUpload'.
Could not create package 'daidazhao/maven/FloatingActionButton': HTTP/1.1 401 Unauthorized [message:This resource requires authentication]

遇到这种错,提示local.properties中user或者apikey设置错误,先检查user名字和apikey是否设置错误,如果检查无误,极有可能是之前注册使用的官网地址,导致报错

  • 坑2

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']

说明library中rope的值和仓库名字不一致,检查两个值是否一致

Paste_Image.png
Paste_Image.png
  • 坑3
  • What went wrong:
    Execution failed for task ':FloatingActionButton:bintrayUpload'.
    Could not create package 'dazhao/maven/FloatingActionButton': HTTP/1.1 404 Not Found

找不到用户名,说明local.properties中user填写,检查名字是否用的是注册名字

总结
整理整个过程
1.注册账号
2.创建maven的Repository
3.在项目根目录的build.gradle中添加bintray插件
4.修改Module中的build.gradle中的配置
5.在local.properties中添加user和apikey的认证
6.在Android Studio的Terminal使用 gradlew install / bintrayUpload上传
7.最后在maven仓库中同步到Jcenter中
8.通过审核,开始使用

参考

一步一步教你在JCenter发布开源库
android开源库发布到jcenter图文详解与填坑

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

推荐阅读更多精彩内容