Android Studio 上传aar(Library)到JC

作者: Javen205 | 来源:发表于2017-03-04 13:13 被阅读2919次

    目的

    这篇文章介绍通过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的时候一直上传不上去!!!,查阅相关资料后才爬出坑....得注册个人号 组织号如何提交待研究

    404 Unauthorized

    记录API Key

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

    组织号的查看API Key 个人号的查看API Key

    创建maven仓库

    Add New Repository 创建maven仓库

    配置build.gradle

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

    项目级别的`build.gradle`中添加依赖
    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

    然后在你需要发布的那个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。如果一切顺利的话就可以完成上传

    使用插件自动上传aar到bintray

    谁便填写一个repoName

    谁便填写一个repoName

    不填写repoName

    不填写reopName 查看maven Rep JPay上传成功

    重复提交

    重复提交

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

    Paste_Image.png

    出现这个错误的原因是执行脚本时并没有默认生成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

    Add to JCenter

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

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

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

    已上传到自己的Maven仓库

    引用自己的库

    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进行二次封装,对外提供一个较为简单的接口和支付结果回调

    [https://github.com/Javen205/JPay](https://github.com/Javen205/JPay)
    [![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支付你了解多少?
    一张二维码集成微信、支付宝支付

    安利时间:
    JPay是对微信App支付、支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调

    极速开发微信公众号是对微信公众平台接口的二次封装。包括开发者模式、事件回调监听、微信模板消息、微信客服消息、自定义菜单、微信支付、素材管理等

    如遇到问题欢迎留言交流

    相关文章

      网友评论

        本文标题:Android Studio 上传aar(Library)到JC

        本文链接:https://www.haomeiwen.com/subject/kzlnwttx.html