新版Bintray下将Android Library 开源到JCenter 的正确姿势

前记

对于经历过Eclipse开发时代的人来说,如今在Android Studio中通过 compile 命令来添加外部库引用简直爽的不要不要的,在使用github上数以千计的开源库时,最常用方式就是:compile 'com.android.support:recyclerview-v7:23.4.0',那么如何让自己写的库也能通过这样的方式引用呢?

其实就是将自己写好的库打包发布到JCenter即可,本来看着非常简单,但是实际做起来每一步都有很多坑等着你去踩。经历过从入门到失败到放弃到成功的过程后,现在将一步步的过程和雷区记录下来,希望能帮助别人越过深坑直达彼岸~~~

准备工作

准备一个库

新建Module,选择Library

Android Studio建库
Android Studio建库

注册谷歌邮箱账号

我知道你不想翻墙,但你迟早需要这个账号的,早准备早升天。

注册Bintray账号

最终需要通过这个账号发布到JCenter上。注册地址官网:https://bintray.com/,这里就有一个坑,现在这个地址默认是注册组织的,注册后会有一个月试用期。

组织账号有试用期
组织账号有试用期

我们一般需要的是个人类型,正确的注册地址为:

https://bintray.com/signup/oss

个人注册地址
个人注册地址

这里是没有填写组织名称的。可以使用第三方注册,常用的就是 github账号,需要注意:如果github账号绑定的邮箱不是gmail邮箱,Bintray无法注册成功。所以这个时候你需要完成第一步然后通过gmail邮箱完成注册。

正式开始起飞

创建组织

使用注册账号登录后,点击 Add New Organization

创建组织-1
创建组织-1

接着下一步

创建组织-2
创建组织-2

接着下一步

创建组织-3
创建组织-3

最后点击create完成创建。

创建仓库

点击 Add New Repository 创建仓库

创建仓库-1
创建仓库-1
创建仓库-2
创建仓库-2

创建成功后,在刚才的界面 Add New Repository 下面可以看到创建的仓库。点击进去查看详细信息,此时里面是空的。

在Android Studio 中添加配置

主要涉及到的配置文件有三个:

此处输入图片的描述
此处输入图片的描述
  • 第一个:工程项目(project)的 build.gradle文件
  • 第二个:模块库(module) 的 build.gradle文件
  • 第三个:工程项目的 local.properties文件

配置第一个

在你Project的build.gradle文件中加入Maven和Jfrog Bintray的依赖插件:

 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
添加插件
添加插件

配置第二个

第二项配置较多,可以参考下面完整的进行补充:

P.S. 有注释的是需要替换自己的参数,其他复制即可

apply plugin: 'com.android.library'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

def siteUrl = 'https://github.com/leonHua/LFilePicker'   // 项目的主页
def gitUrl = 'https://github.com/leonHua/LFilePicker.git'   // Git仓库的url
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

version = "1.0" //发布版本号
group = "com.leon" //最终引用形式,如compile 'com.leon.lfilepicker:1.0.0',其中lfilepicker在后面配置
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:recyclerview-v7:25.0.0'
}
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    pkg {
        repo = 'leonlibrary'//自己创建的仓库名字
        name = 'lfilepicker'//上传到JCenter的名字,最终引用的名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ['MIT']//不能随便写,只能是仓库创建时选择的license type
        userOrg = 'mumusalibrary' //自己创建的organization名称
        publish = true // 是否是公开项目,公开别人可以引用

        version {
            name = '1.0'
            desc = 'leon open library.'//描述,自己定义
            released  = new Date()
            vcsTag = 'v1.0'
            attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
        }
    }
    configurations = ['archives']
}

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                name 'Leon Android'
                description 'leon open library.'
                url siteUrl
                // Set your license
                licenses {
                    license {
                        name 'MIT' //和之前自己定义的协议一致
                        url 'https://raw.githubusercontent.com/minggo620/Pluto-Android/master/LICENSE'
                    }
                }
                developers {
                    developer {
                        id 'leonhua2017'        //填写bintray或者github的用户名
                        name 'leonhua2017'         //姓名
                        email 'leon.gitlibrary@gmail.com'//邮箱
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
task javadoc(type: Javadoc) {
    failOnError false //必须添加以免出错
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}
artifacts {
    archives javadocJar
    archives sourcesJar
}

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

以上添加成功后,点击编译下项目,会下载一些插件东西,成功后继续。

配置第三个

在local.properties中添加账户名称和apikey信息

添加账户和apikey
添加账户和apikey

apikey信息可以通过以下方式获得:

获取apikey
获取apikey

执行命令

在Android Studio中的Terminal窗口中输入命令:gradlew -v
正常的话会显示版本信息,如果还没有安装的话会自动安装,安装后也会显示版本信息。

然后在输入命令:gradlew install
此时也会显示下载安装一些东西,耐心等待即可,完成后显示“BUILD SUCCESSFUL”即表示成功。

install 成功
install 成功

最后上传,在Terminal窗口输入命令:gradle bintrayUpload
然后等待上传,显示“BUILD SUCCESSFUL”即表示成功。

upload 成功
upload 成功

发布

回到仓库页面可以看到刚才上传的项目:

发布成功
发布成功

点击项目后进入详细界面,这个时候点击界面右下角的add to JCenter,然后输入描述发送即可。
然后等待审核,我这个比较快,10分钟就通过。

遇到的坑

1:官网地址

前面已经说过,注册地址一定要选对

2:Unsupported major.minor version 52.0

首先检查JDK版本问题,需要更换到JDK8,环境变量配置后一定记得需要在Android Studio中配置

JDK配置
JDK配置

如果JDK没问题,还有可能是Studio里各项配置的版本问题,查了很多资料,总的来说就是当前环境的整体配置版本(以下三项)要一致:

  • compileSdkVersion
  • buildToolsVersio
  • gradle

3: HTTP/1.1 401 Unauthorized

这个一般是因为账号和apikey信息错误,仔细检查local.properties文件中的配置是否正确

4: gradlew 不是内部或外部命令

配置gradle的环境变量,和配置JDK类似,如果配置过后还不行,所有的命令更换为 gradle 也可以。

5: 路径问题

如果环境中除了需要打包的库还有其他模块,那么在命令行窗口中需要先切换到对应的目录环境下再执行命令。

路径
路径

End

弄到这里终于算是成功了。发布到JCenter有很多种方式,这里只是用了其中的一种,自己做的时候也参考了很多文章,有一些时间早点的文章会出现很多莫名其妙的问题。可能别人成功实现的方法,自己在做的过程中还是会发生很多原文章中没有提(遇)到的问题。希望自己的总结可以帮到后来者,同时不可避免的还会有一些文中没有的问题出现,欢迎留言交流。

欢迎访问博客: https://leonhua.github.io/ ,查看更多文章。

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

推荐阅读更多精彩内容