发布Library到jcenter的艰辛之路
2016-12-14 10:22
387 查看
本文写于2016年12月,使用AS版本是2.2,build-tools版本22~24。
想写个SDK,发布到jcenter上试一试,没想到在上传到bintray的时候遇到那么多的问题,在网上搜索了那么多的教程,甚至都把groovy的语法都看了一遍,最终还是成功了,下面记录一下我最终成功那一刻的文件。当然最后参考的一篇博客是这位兄台的。
第一、新建一个账号(如果没有的话),如果新建账号的时候什么都不管,他就会用你的company name来为你新建一个organization(这个organization还是删不掉的),不过没问题,建了就建了吧,现在就有了一个organization了,截图如下
进来后就点这个圈圈的地方,后面就在这里操作
第二、新建一个仓库(Repositories),没有仓库上传时会报错,找不到仓库,错误如下
这里的repo就是仓库的名字,所以,在下面这个地方,新建一个仓库,名字就叫做maven,
然后如图填写
然后你就有了一个仓库,然后网页上你暂时不用做啥了
第一、在你的工程最外层的build.gradle文件里加两句话,
注意啊,这里第一行的maven的版本,很多博客上写的是1.4 啦,1.4.1啦,都过时了,都会报错的,我这1.5也是没办法了试出来的,这个不知道有什么好的方式没有,加进去以后文件截图:
第二、在library的根目录下(就是和build.gralde平级的目录)添加两个配置文件(其实写死也行的)
project.properties:
local.properties
第三、搞一个Gradle脚本,有很多人是选择用一个链接来简化操作,但是我觉得那样可能不靠谱,万一要改动就没法搞了,所以还是在本地建一个Gradle文件,命名为bintrayUpload.gradle,是用来上传到bintray的:
这个文件里引用了上面两个配置文件的东西,唯一需要关注的是最后面的一个pkg,这里的一个userOrg是新增的,如果不加这个字段,就上传不上去,就这个东西坑了我两天,你需要把userOrg设置成你的bintray里的组织名,然后把repo设置成你的仓库名,如果前面就是按照我的设置的,那就是maven
第四、引用bintrayUpload.gradle脚本
在library的build.gradle的最后加一句话就好了:
第五、在Terminal命令行中执行两句代码
1)
如果没有执行过gradlew命令,他会先下载一个gradle包,看网速了
2)
如果能一次成功,亲爱的,你真棒,如果失败了也没关系,看看报错,相信我这篇文章写的东西能成功,报错请参考上面说的这篇文章,或者留言共同交流
第一次写博客,有点方,出错之处请指出来。
想写个SDK,发布到jcenter上试一试,没想到在上传到bintray的时候遇到那么多的问题,在网上搜索了那么多的教程,甚至都把groovy的语法都看了一遍,最终还是成功了,下面记录一下我最终成功那一刻的文件。当然最后参考的一篇博客是这位兄台的。
1.先搞一个library
这个其实没什么说的,就是建一个module,很简单的,library里的gradle文件是这样的apply plugin: 'com.android.library' android { compileSdkVersion 20 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 16 targetSdkVersion 20 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:20.0.0' }
2.bintray.com里面的操作
既然要上传到jcenter,肯定要先把文件传到他公司的仓库里,所以第一、新建一个账号(如果没有的话),如果新建账号的时候什么都不管,他就会用你的company name来为你新建一个organization(这个organization还是删不掉的),不过没问题,建了就建了吧,现在就有了一个organization了,截图如下
进来后就点这个圈圈的地方,后面就在这里操作
第二、新建一个仓库(Repositories),没有仓库上传时会报错,找不到仓库,错误如下
这里的repo就是仓库的名字,所以,在下面这个地方,新建一个仓库,名字就叫做maven,
然后如图填写
然后你就有了一个仓库,然后网页上你暂时不用做啥了
3.配置library,上传到bintray
说来都是泪,由于对Gradle不了解,对groovy语法也不懂,都是在各个博客上面抄啊抄,改啊改,弄了一大堆文件,所以有时间还是推荐好好学习一下Gradle。在这里就贴一下我的有用的配置第一、在你的工程最外层的build.gradle文件里加两句话,
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'//打包的插件 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'//上传的插件
注意啊,这里第一行的maven的版本,很多博客上写的是1.4 啦,1.4.1啦,都过时了,都会报错的,我这1.5也是没办法了试出来的,这个不知道有什么好的方式没有,加进去以后文件截图:
第二、在library的根目录下(就是和build.gralde平级的目录)添加两个配置文件(其实写死也行的)
project.properties:
#project project.name=SDKDemo #项目名称 project.groupId=com.droi.www #群组名称,若包名是com.example.lib,则填com.example project.artifactId=apklibrary #产出物名称,若包名是com.example.lib,则填lib project.packaging=aar #打包方式,一般都是aar project.siteUrl=https://github.com/youraddr/yourproject #你的github地址 project.gitUrl=https://github.com/youraddr/yourproject.git #你的git地址 #javadoc javadoc.name=SDKDemo #javadoc上面的名字,和项目名称一致就行了
local.properties
#bintray bintray.user=931851190 #在bintray上的用户名,注意不是组织名 bintray.apikey=4c2fdcd4b5e957746fe053dd9089cda710bb9325 #在bintray上获得的apikey(查询方法网上很多) #developer developer.id=marinLiu #随便写 developer.name=marinLiu #随便写 developer.email=l931851190@gmail.com #随便写
第三、搞一个Gradle脚本,有很多人是选择用一个链接来简化操作,但是我觉得那样可能不靠谱,万一要改动就没法搞了,所以还是在本地建一个Gradle文件,命名为bintrayUpload.gradle,是用来上传到bintray的:
apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' // load properties Properties properties = new Properties() File localPropertiesFile = project.file("local.properties"); if(localPropertiesFile.exists()){ properties.load(localPropertiesFile.newDataInputStream()) } File projectPropertiesFile = project.file("project.properties"); if(projectPropertiesFile.exists()){ properties.load(projectPropertiesFile.newDataInputStream()) } // read properties def projectName = properties.getProperty("project.name") def projectGroupId = properties.getProperty("project.groupId") def projectArtifactId = properties.getProperty("project.artifactId") def projectVersionName = android.defaultConfig.versionName def projectPackaging = properties.getProperty("project.packaging") def projectSiteUrl = properties.getProperty("project.siteUrl") def projectGitUrl = properties.getProperty("project.gitUrl") def developerId = properties.getProperty("developer.id") def developerName = properties.getProperty("developer.name") def developerEmail = properties.getProperty("developer.email") def bintrayUser = properties.getProperty("bintray.user") def bintrayApikey = properties.getProperty("bintray.apikey") def javadocName = properties.getProperty("javadoc.name") group = projectGroupId // This generates POM.xml with proper parameters install { repositories.mavenInstaller { pom { project { name projectName groupId projectGroupId artifactId projectArtifactId version projectVersionName packaging projectPackaging url projectSiteUrl licenses { license { name 'The Apache Software License, Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } developers { developer { id developerId name developerName email developerEmail } } scm { connection projectGitUrl developerConnection projectGitUrl url projectSiteUrl } } } } } // This generates sources.jar 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)) } // This generates javadoc.jar task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar } // javadoc configuration javadoc { options{ encoding "UTF-8" charSet 'UTF-8' author true version projectVersionName links "http://docs.oracle.com/javase/7/docs/api" title javadocName } } // bintray configuration bintray { user = bintrayUser key = bintrayApikey configurations = ['archives'] pkg { userOrg = "droi" repo = "maven" name = projectName websiteUrl = projectSiteUrl vcsUrl = projectGitUrl licenses = ["Apache-2.0"] publish = true } }
这个文件里引用了上面两个配置文件的东西,唯一需要关注的是最后面的一个pkg,这里的一个userOrg是新增的,如果不加这个字段,就上传不上去,就这个东西坑了我两天,你需要把userOrg设置成你的bintray里的组织名,然后把repo设置成你的仓库名,如果前面就是按照我的设置的,那就是maven
第四、引用bintrayUpload.gradle脚本
在library的build.gradle的最后加一句话就好了:
apply from: "bintrayUpload.gradle"
第五、在Terminal命令行中执行两句代码
1)
gradlew install检查语法,打包
如果没有执行过gradlew命令,他会先下载一个gradle包,看网速了
2)
gradlew bintrayUpload上传到bintray
如果能一次成功,亲爱的,你真棒,如果失败了也没关系,看看报错,相信我这篇文章写的东西能成功,报错请参考上面说的这篇文章,或者留言共同交流
4.发布到jcenter
这就非常简单了,在bintray里面看到你的项目,点击右边的Add to jcenter,填点东西就好了,我发布了几十分钟就审核通过了。
第一次写博客,有点方,出错之处请指出来。
相关文章推荐
- android将library发布至jcenter的趟坑之路
- Android开发:如何把Android studio中的Library发布到Jcenter
- 使用Gradle发布Android Library到JCenter
- Android studio 发布Android Library项目到JCenter
- 如何使用AndroidStudio将开源项目library发布到jcenter
- 如何通过Android Studio发布library到jCenter和Maven Central
- 教你轻松将Android library 发布到JCenter
- 发布Android Library项目到JCenter的便捷方法
- 发布AndroidLibrary到JCenter,一步一步,拒绝踩坑!
- Android 发布Android Library项目到JCenter
- 如何将Android studio中Library发布到Jcenter
- [置顶] 发布Library到JCenter,步步为营
- [置顶] 带你装逼带你飞(将Library发布到JCenter)
- Gradle发布Library到JCenter
- Android Studio从jCenter发布和下载Library
- 10分钟发布android library到jcenter