前面的废话
第一篇文章,不分享具体的技术。只想谈一谈AndroidStudio发布远程包到bintray。因为,遇到的坑。。。实在太多了!我相信很多小伙伴也是一样的,有苦难言! 其实网上的资料不少,但大多数都是大神翻译过来的,有些看似简单的细节,却被一笔带过或者忽略了,而这些细节往往决定了成败, o(︶︿︶)o 多么痛的领悟! 好啦,话不多说,直奔主题吧!
第一步:注册bintray
不要小看这一步,坑多着呢!
注册地址:https://bintray.com/signup/oss
这个很重要!很多博客上没有说明,很多人直接都去https://bintray.com这里注册了,这里注册的是企业级账户,30天内要激活,否则是无法上传到jcenter上去的!oss上注册的是个人用户,无需激活,马上就可以使用。PS:国内的邮箱好像不支持,试过QQ和网易的都不行!建议用gmail或者hotmail,亲测有效!
第二步:新建仓库
登录bintray之后,在你自己的主界面点击 Add New Repository
第三步:填写仓库信息
很简单,要注意的地方有3点:
1、仓库名称:在AS里上传的时候会用到。
2、类型:直接选maven。
3、证书:直接选Apache-2.0。
第三步完成之后,bintray里要做的事情基本就完毕了。下一步我们要做的就是在AS里面上传包到bintray上。
第四步:新建Android项目
这一步很关键,新建一个project很简单,但里面的配置很繁琐,容易出错。别急,咱一步步来!
一、在项目根目录下的gradle文件(project的gradle)里面,配置bintray和maven的插件。主要问题可能是插件版本兼容的问题,如下图:
二、在项目根目录下的properties文件(gradle.properties)里面,配置项目的信息。
三、新建一个library类型的module,我们上传到远程的代码和资源都写在这里。
选Android Library就行
四、在新建的module下面,新建一个gradle.propertise文件
这里主要是用来配置项目的信息,除了PROJ_NAME能上传到bintray,其他信息都没上传上去,但不影响整体进度。这里我们可以先忽略~
五、在project的 local.properties文件里面配置bintray的相关信息
bintray.user就是网站右上角的用户名,bintray.apikey可以在网站里面获取。
六、在module里面新建一个bintray.gradle文件,名字可以随便取,module的gradle文件要引用它。
applyplugin:'com.github.dcendents.android-maven'
applyplugin:'com.jfrog.bintray'
group= PROJ_GROUP
version= PROJ_VERSION
install {
repositories.mavenInstaller{
//这里是生成pom文件,需要配置的参数
pom {
project{
packaging'aar'//生成的包的类型
descriptionPROJ_DESCRIPTION
namePROJ_POM_NAME
url PROJ_WEBSITEURL
//设置证书的信息
licenses {
license {
namePROJ_LICENCE_NAME
url PROJ_LICENCE_URL
distribution PROJ_LICENCE_DEST
}
}
//设置开发者的信息
developers {
developer {
id DEVELOPER_ID
nameDEVELOPER_NAME
email DEVELOPER_EMAIL
}
}
//开发者和项目附带的地址
scm {
connection PROJ_VCSURL
developerConnection PROJ_VCSURL
url PROJ_WEBSITEURL
}
}
}
}
}
task sourcesJar(type: Jar) {
classifier='sources'
}
task javadoc(type: Javadoc) {
source= android.sourceSets.main.java.srcDirs
classpath+=project.files(android.getBootClasspath().join(File.pathSeparator))
failOnError=false
}
task javadocJar(type: Jar,dependsOn: javadoc) {
classifier='javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties =newProperties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo ="MySecondLib"// 非常非常重要!不要乱填写,否则会失败的!它对应的是bintray中的仓库名称,就是bintray用户名的下一级!
name = PROJ_NAME
websiteUrl = PROJ_WEBSITEURL
vcsUrl = PROJ_VCSURL
licenses = ["Apache-2.0"]
publish =true
version{
desc = PROJ_DESCRIPTION
gpg {
sign =true//Determines whether to GPG sign the files. The default is false
//passphrase = properties.getProperty("bintray.gpg.password")
//Optional. The passphrase for GPG signing'
}
}
}
}
七、在module的gradle文件中,引用bintray.gradle文件。
八、执行gradle命令上传包到bintray。
执行gradle命令的时候,最好先确定当前项目的JDK路径与环境变量的JDK路径保持一致。否则,可能会因为多个JDK环境导致执行gradle命令失败,本人就遇到过这个坑,弄了好久才解决! 至于JDK的版本,建议用最新的1.8吧 ~
绕过这些坑之后,直接执行 gradlew bintrayUpload 回车。一切顺利的话,你的包就已经上传到bintray上去啦。是不是很兴奋?
第五步:上传到jcenter
最简单的一步,直接在bintray里面 点一下Add to jCenter。 大概2-3个小时就能收到审核的信息,通过之后,你上传的包就能供全世界的小伙伴使用啦!很厉害有木有! 想起来还有点小激动呢 ! o(∩_∩)o
在我们项目中引用的方式就是 compile'com.ffzx.maven:ok_ffzx_lib:1.0.0' 是不是有点成就感?还等什么,赶紧动手,早日开启超神之路吧 ~~~
其他的坑
如果你的源代码中有中文,那么恭喜你,很有可能会上传失败!因为gradle默认编译的是GBK格式,需要修改为UTF-8格式。
在项目的build.gradle(2.0版本以上)文件中加上
tasks.withType(JavaCompile) {
options.encoding ="UTF-8"
}
除此之外,肯定还有别的我没遇到过的坑。所以希望大家早日发现,多多分享,共同进步 !