思路是:
独立开源模块
上传到Bintray
发布到JCenter独立模块 就是抽出相应的代码到独立的modle里面,以便生成aar文件。比如我将的我banner 部分代码封装在一个modle里面。发布到Bintray 至于为什么要发布到bintray上 参考 注册Bintray账号 有的话请跳过,没有的话 传送门 。如果是企业级别的就注册企业的,个人开发者就注册个人的,企业的要收费,有30天试用期。 注册之后可以新建一个maven库。配置Bintray 添加插件 因为要使用到Bintray和Maven的服务,在项目的的build.gradle
文件中添加两个插件,参考 Bintray plugin maven plugin
1 2 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.2'
大概长这个样子
配置开发者信息 在local.properties
中添加:
1 2 3 4 5 6 bintray.user=开发者注册账号 bintray.apikey=开发者key ##developer developer.id=这个可以随便写,一般是你开源社区的昵称 developer.name=你的名字 developer.email=联系邮箱,国内的qq,163统统不行。
user:如果user你不记得是什么了可以打开的bintray主页面即:https://bintray.com/xxx
这个xxx就是你需要填写的user。 API key:在个人页面点击头像,选择view prefile。在做上方,点击头像羡慕的Edit,然后你就看见了 涉及到隐身开发者信息,所以最好不要同步到开源社区上了,当然在这个信息化时代,不存在什么个人隐私信息。
配置项目信息 在modle下面新建一个project.properties 文件,用于几种记录信息并输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #project #项目名称 project.name=项目名称 project.version=版本号 project.bintrayRepo=就是你刚刚建立的maven库名字 #项目组ID 通常情况下如果你的包名为com.example.test,那么项目组ID就是com.example project.groupId=xx #项目ID 通常情况下如果你的包名为com.example.test,那么项目ID就是test #保持你的library module的名字同artifactId一样 project.artifactId=xx #包类型,Android库是aar project.packaging=aar #项目官方网站的地址,没有的话就用Github上的地址 project.siteUrl=https://github.com/471448446/DAndroid/tree/master/demo_android/BBanner #项目的Git地址 project.gitUrl=https://github.com/471448446/DAndroid/tree/master/demo_android/BBanner #项目描述 project.des=a simple banner for android #javadoc javadoc.name=BBanner
然后在modler下新建bintrayUpload.gradle文件,填入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 apply plugin: 'com.jfrog.bintray' apply plugin: 'com.github.dcendents.android-maven' //需要在local.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()) } //properties.load(project.rootProject.file('local.properties').newDataInputStream()) // read properties def projectName = properties.getProperty("project.name") def projectVersion = properties.getProperty("project.version") def projectBintrayRepo = properties.getProperty("project.bintrayRepo") def projectGroupId = properties.getProperty("project.groupId") def projectArtifactId = properties.getProperty("project.artifactId") def projectPackaging = properties.getProperty("project.packaging") def projectSiteUrl = properties.getProperty("project.siteUrl") def projectGitUrl = properties.getProperty("project.gitUrl") def projectDes = properties.getProperty("project.des") 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") //maven配置 version = projectVersion // 指定版本 group = projectGroupId // 这里需要和真实包名对应,不能随便填写 task generateSourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs //通过from函数指定代码源,这里是默认代码源 classifier 'sources' } task generateJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs //source指定了代码源 classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } //这里dependsOn意为仅当generateJavadocs完成后才开始本task task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) { from generateJavadocs.destinationDir classifier 'javadoc' } //将你生成的源代码和Javadoc Jar文件添加到Maven中 artifacts { archives generateJavadocsJar archives generateSourcesJar } // bintray configuration bintray { user = bintrayUser key = bintrayApikey pkg { repo = projectBintrayRepo //发布到JCenter上的项目名字 name = projectName vcsUrl = projectGitUrl websiteUrl = projectSiteUrl licenses = ["Apache-2.0"] publish = true } configurations = ['archives'] } //版权申明 install { repositories.mavenInstaller { // This generates POM.xml with proper parameters pom { project { packaging projectPackaging // Add your description here name projectDes groupId projectGroupId artifactId projectArtifactId url projectSiteUrl version projectVersion // Set your license 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 } } } } }
这个基本上没什么修改的。 最后在modle的build.gradle的文末(ps:不要添加在文首)添加:apply from: "bintrayUpload.gradle"
到处配置以及结束。
上传的bintray 在项目的gradle里面,点击gradle选择modle项目,以次输入并点击确认 :
install
bintrayUpload
也可以在gradle的命令行里面输入:
gradlew install
gradlew bintrayUpload
在linux或者mac下如果你没有将gradle命令添加到全局那么在gradlew前面需要添加./
上传成功后你的项目就在bintray的maven里面的。你可以在查看 是否上传没有。发布到jCenter 这个时候的开源库还是在你的私人仓库里面引用方式是:在modle里面添加你的maven url,然后在complie你的项目名字。maven库的引用 发布到jCenter方式很简单,只需点击Add to JCenter 审核成功后你就可以快乐的引用了。遇到的问题
如果你是个人用户的话,注册bintray账号就别注册企业版的,如果你需要消费,哪也无妨。个人版的注册在页面的最底部。当时也是先注册,在注销(会删除所有的库),在注册。
error:
Error:(3, 0) No service of type Factory<LoggingManagerInternal> available in ProjectScopeServices.
<a href="openFile:/Users/better/Documents/WorkSpace/git/DAndroid/demo_android/BBanner/banner/build.gradle">Open File</a>
使用bintray和maven插件的时候最好使用最新的
Error : cause android.compileSdkVersion is missing
申明bintrayUpload.gradle时最好不要紧跟着申明modle语句之后,如果你没分了配置文件的话不会遇见这个错误。
Thinks 5分钟发布Android Library项目到JCenter 发布aar到jcenter的正确姿势 使用Android Studio把自己的Android library分发到JCenter