
前记
对于经历过Eclipse开发时代的人来说,如今在Android Studio中通过 compile 命令来添加外部库引用简直爽的不要不要的,在使用github上数以千计的开源库时,最常用方式就是:compile 'com.android.support:recyclerview-v7:23.4.0',那么如何让自己写的库也能通过这样的方式引用呢?
其实就是将自己写好的库打包发布到JCenter即可,本来看着非常简单,但是实际做起来每一步都有很多坑等着你去踩。经历过从入门到失败到放弃到成功的过程后,现在将一步步的过程和雷区记录下来,希望能帮助别人越过深坑直达彼岸~~~
准备工作
准备一个库
新建Module,选择Library

注册谷歌邮箱账号
我知道你不想翻墙,但你迟早需要这个账号的,早准备早升天。
注册Bintray账号
最终需要通过这个账号发布到JCenter上。注册地址官网:https://bintray.com/,这里就有一个坑,现在这个地址默认是注册组织的,注册后会有一个月试用期。

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

这里是没有填写组织名称的。可以使用第三方注册,常用的就是 github账号,需要注意:如果github账号绑定的邮箱不是gmail邮箱,Bintray无法注册成功。所以这个时候你需要完成第一步然后通过gmail邮箱完成注册。
正式开始起飞
创建组织
使用注册账号登录后,点击 Add New Organization

接着下一步

接着下一步

最后点击create完成创建。
创建仓库
点击 Add New Repository 创建仓库


创建成功后,在刚才的界面 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信息可以通过以下方式获得:

执行命令
在Android Studio中的Terminal窗口中输入命令:gradlew -v
正常的话会显示版本信息,如果还没有安装的话会自动安装,安装后也会显示版本信息。
然后在输入命令:gradlew install
此时也会显示下载安装一些东西,耐心等待即可,完成后显示“BUILD SUCCESSFUL”即表示成功。

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

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

点击项目后进入详细界面,这个时候点击界面右下角的add to JCenter,然后输入描述发送即可。
然后等待审核,我这个比较快,10分钟就通过。
遇到的坑
1:官网地址
前面已经说过,注册地址一定要选对
2:Unsupported major.minor version 52.0
首先检查JDK版本问题,需要更换到JDK8,环境变量配置后一定记得需要在Android Studio中配置

如果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/ ,查看更多文章。
网友评论
Error:Could not find method bintray() for arguments [build_97d2mmbswfob6yf9oih48mzf2$_run_closure3@27b06cfc] on project ':app' of type org.gradle.api.Project.