Android Studio 上传aar(Library)到JCenter

目的

这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,发布自己的android library(也就是aar)到公共的jcenter仓库。
为什么选择JCenter,因为JCenter现在是Android Studio中repositories的默认节点了,之前是Maven的,不过JCenter是兼容Maven的。

环境

Android Studio 2.2.3

参考资料
http://www.jianshu.com/p/c4f4894ad215
http://www.jianshu.com/p/6a6eca8c24c4
http://www.cnblogs.com/qianxudetianxia/p/4322331.html

申请Bintray账号

bintray上注册一个账号 建议注册个人账号
可以使用github账号直接授权登陆。

很重要,由于 Bintray网站 改版了,增加了Organization的概念。如果点击中间那个大大的绿色按钮,用那个点了注册就错了!! 变成了注册一个组织,注册地址是 https://bintray.com/signup 提交aar的时候就会出现Unauthorized这个错误 注意:个人的注册地址为https://bintray.com/signup/oss

天大的坑!一开始就进入了上面的坑到最后提交上传aar的时候一直上传不上去!!!,查阅相关资料后才爬出坑….得注册个人号 组织号如何提交待研究

记录API Key

注册后,在https://bintray.com/profile/edit 中查看,首次查看的时候提示需要输入登录密码确认。

创建maven仓库

配置build.gradle

配置插件上传到bintray需要的插件

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'

插件版本过低可能遇到如下的异常

http://www.jianshu.com/p/c4f4894ad215” title=”” />

然后在你需要发布的那个module(即是library aar)的build.gradle里配置如下内容:

1、配置插件
// 根节点添加
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
2、配置版本
// 根节点添加
version = "0.0.1"
3、定义相关网站
// 根节点添加
def siteUrl = 'https://github.com/Javen205/JPay'    // project homepage
def gitUrl = 'https://github.com/Javen205/JPay.git' // project git 
4、定义Group

举个例子,当我们引用retrofit的时候是这样的:

compile 'com.squareup.retrofit2:retrofit:2.1.0

引号内字符串以冒号分割为三部分,第一部分就是group,第二部分是name, 第三部分是上面定义的version。

// 根节点添加
group = "com.javen205.jpay"

上传到jcenter至少需要四个文件,除了打包的aar之外,还需要pom和javadoc,source,否则是通不过jcenter的审核。这些我们都可以用脚本生成。

5、打包javadocjar和sourcejar

这也是上传到jcenter必须要的。

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))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}
artifacts {
    archives javadocJar
    archives sourcesJar
}
6、定义pom并打包aar
// 根节点添加
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                name 'JPay For Android'
                url siteUrl
                // 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 'javen205'
                        name 'javen.zhou'
                        email 'javen205@126.com'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
7、上传到Jcenter仓库

上传到jcenter的网站Bintray,需要用户验证:

bintrayUser=your_user_name 我这里为javendev
bintrayApiKey=your_apikey 就是在上面记录的API Key

这个属于个人隐私,一般不传,所以需要在记录到项目下的local.properties中(利用gitignore忽略这个文件到git),然后脚本再从local.properties中读取这两个值。

//配置bintray参数
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintrayUser")
    key = properties.getProperty("bintrayApiKey")
    configurations = ['archives']
    pkg {
        repo = "maven"               //跟上面创建的Maven仓库名字保持一致
        name = "JPay"                //发布到JCenter上的项目名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

准备工作终于都做完了,我们开始使用插件自动上传aar到bintray。如果一切顺利的话就可以完成上传

谁便填写一个repoName

不填写repoName

重复提交

将库提交到JCenter,点击右侧的Add to JCenter

出现这个错误的原因是执行脚本时并没有默认生成pom-default.xml以及相关的文档和jar,添加到JCenter又必须需要,以下是解决方案

可以在Terminal中执行如下命令如果成功了就会在Lib工程build目录中自动生成docs libs

 ./gradlew clean build bintrayUpload

可能会遇到的错误
Fix the issues identified by lint, or add the following to your build script…

以上问题解决了,我们在maven中删除之前上传的,再次上传arr到bintray,成功之后再点击右侧的Add to JCenter

然后直接send就行(提交JCenter后groupID和在本地定义的一样,所以本地定义groupID要能标识个人,最好到 https://jcenter.bintray.com 看下有没有重复的包名

最后耐心等待Bintray审核通过。

其实我们的aar 已近上传到的Maven中我可以可以直接引用,上传到JCenter 就不再需要定义自己maven仓库地址,直接compile即可。

引用自己的库

1、Maven方式引用自己的库

只要在root下的build加上自己maven地址

maven{
     url "https://dl.bintray.com/javendev/maven"
    }

然后在app的build中加上引用即可

compile 'com.javen205.jpay:jpaylib:0.0.1'
2、compile方式引用自己的库

如果上面添加到JCenter审核通过,就可以直接在app的build中加上引用即可

compile 'com.javen205.jpay:jpaylib:0.0.1'

如果没有审核通过就添加引用当然就会存在引用异常,如下图

安利时间

JPay是对微信App支付和支付宝支付App支付的SDK进行二次封装,对外提供一个较为简单的接口和支付结果回调

[![License](https://img.shields.io/badge/license-Apache%202-green.svg)](https://www.apache.org/licenses/LICENSE-2.0)
[![Download](https://api.bintray.com/packages/javendev/maven/JPay/images/download.svg)](https://dl.bintray.com/javendev/maven/JPay/_latestVersion)

推荐阅读
Android依赖管理与私服搭建
Android版-支付宝APP支付
Android版-微信APP支付
支付宝Wap支付你了解多少?
一张二维码集成微信、支付宝支付

如遇到问题欢迎留言交流

时间: 2024-09-28 04:36:13

Android Studio 上传aar(Library)到JCenter的相关文章

android 上传aar到私有maven服务器的示例

搞这个东西也是花了蛮长时间,主要还是对gradle中的groovy语言不熟悉所导致的,写下来,以防下次再入坑- 在gradle中新建task 如果你需要将某个module打包成aar,并上传到maven上去,需要在这个module下面的build.gradle文件中添加如下代码: 其中代码: apply plugin: 'maven' 表示我们要应用的插件. MAVEN_LOCAL_PATH表示maven服务器地址,packaging表示需要打包的类型,groupId:artifactId:ve

服务器-真机在Android Studio上开发问题!!

问题描述 真机在Android Studio上开发问题!! 我用真机做android开发,在android studio上,报错可以看到,给服务器传的参数和返回的报文都看不到.什么原因?我用的是乐1pro! 解决方案 你没有打印,当然看不到了,出错是系统打印出来的 解决方案二: 你在关键位置加上log就好了 解决方案三: 用systemoutprintln打印出来

android st...-android studio上如何配置opencv?

问题描述 android studio上如何配置opencv? 如题.本人刚接触在android平台的模式识别,求指点opencv如何配置. 解决方案 1.下载 进入官网(http://opencv.org/)下载OpenCV4Android并解压.目录结构如下图所示. 其中,sdk目录即是我们开发opencv所需要的类库:samples目录中存放着若干opencv应用示例(包括人脸检测等),可为我们进行android下的opencv开发提供参考:doc目录为opencv类库的使用说明及api文

地图-android 头像上传服务器

问题描述 android 头像上传服务器 实现一个选择本地图片上传服务器,上传的应该是路径还是什么,我觉得应该不是路径,毕竟是本地的 解决方案 上传的当然不是路径,上传的是输出流,服务器端再接收输入流. 解决方案二: Android 测试上传头像到服务器android上传头像android 上传头像

在android studio上运行百度地图

问题描述 在android studio上运行百度地图 在真机上和genymotion上面运行的不一样 然后我朋友说可能.so文件少了..我也不清楚.. 真机运行出现error opening trace file: No such file or directory 解决方案 Android Studio配置百度地图开发环境 解决方案二: 官方sdk少了点东西 去官方的Demo里拷 解决方案三: 解决方案四: 解决方案五: Genymotion上,定位的位置为非洲西海岸(经纬度为0,0,将地图

android 图片上传 服务器接收图片方法代码

问题描述 android 图片上传 服务器接收图片方法代码 求android 批量图片上传 服务器接收,代码,最好有详细解释,万分感谢jackcathy369@163.com 解决方案 http://programmerguru.com/android-tutorial/how-to-upload-image-to-java-server/......答案就在这里:Android 上传图片,服务器接收图片实现 解决方案二: http://blog.csdn.net/y150481863/arti

在Android远程上传以及下载图片---XFire框架

http://blog.csdn.net/haha_mingg/article/details/6347588   有时我们可以看到,图片往往被提交到服务器端,这里我通过XFire框架来实现远程上传以及下载图片的功能. 首先我们来看看从服务器端下载图片的功能:   我用的是KSOAP框架,我之前的文章有讲述过.在这里不要多说,贴上代码.   首先我们看看Acitivity中的代码:  [java] view plaincopyprint? package com.net.connect.app;

Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this); 变成了 ButterKnife.bind(this); 关于7.0.1的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页: http://jakewharton.github.io/butterknife/   言归正传开始说说Android But

Android WebView 上传文件支持全解析_Android

默认情况下情况下,使用Android的WebView是不能够支持上传文件的.而这个,也是在我们的前端工程师告知之后才了解的.因为Android的每个版本WebView的实现有差异,因此需要对不同版本去适配.花了一点时间,参考别人的代码,这个问题已经解决,这里把我踩过的坑分享出来. 主要思路是重写WebChromeClient,然后在WebViewActivity中接收选择到的文件Uri,传给页面去上传就可以了.创建一个WebViewActivity的内部类 public class XHSWeb