zoukankan      html  css  js  c++  java
  • Android拓展系列(12)--使用Gradle发布aar项目到JCenter仓库

    目的

    发布自己的android library(也就是aar)到公共的jcenter仓库,所有的人都能用gradle最简单的方式引用。
    为什么选择jcenter,它兼容maven,而且支持更多形式仓库,android studio最新版本已经默认jcenter了。

    环境

    Android Studio 1.0+

    参考文章

    使用Gradle发布Android开源项目到JCenter
    使用Gradle发布项目到JCenter仓库
    Publishing Gradle Android Library to jCenter Repository
    实际上,有这3篇文章已经足够你学会如何发布项目到jcenter了。不过正好我最近在弄一个LessCode项目并发布到了jcenter中了,所以以此来整理一下吧。

    一、注册账号

    在https://bintray.com/上注册一个账号。
    我是以github账号直接登陆的。

    二、记录API Key

    注册后,在https://bintray.com/profile/edit页面的左边菜单的最下面有API Key,点击后:

    复制明文API key,后面会用到。

    三、新建项目(以LessCode为例)

    在Android Studio中New一个Project。
    完成之后在LessCode下会有一个build.gradle,在buildscript/dependencies中添加两个classpath:

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

    这是两个帮助发布项目的插件,完整的project build.gradle请查看这里

    四、新建模块

    在当前Project中New一个Module,比如我这里叫lesscode-core,这个默认lesscode-core其实已经是一个完整的Android Library,就可以以aar的形式发布了。
    完成之后在lesscode-core下也会有一个build.gradle,这个build.gradle是今天的重中之重。

    五、构建build.gradle

    默认的build.gradle大概是这样的:

    apply plugin: 'com.android.library'
    
    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.2"
    
        defaultConfig {
            minSdkVersion 11
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
    }
    

    下面我们一步步修改补充这个build.gradle

    1. 添加插件

    // 根节点添加
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    

    2. 定义版本

    // 根节点添加
    version = "0.1"
    

    3. 定义相关网站

    有单独的官方网站那是最好的,没用的话就用git网址就可以了。

    // 根节点添加
    def siteUrl = 'https://github.com/openproject/LessCode'    // project homepage
    def gitUrl = 'https://github.com/openproject/LessCode.git' // project git   
    

    4. 定义Group

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

    compile 'com.android.support:recyclerview-v7:21.0.2'
    

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

    // 根节点添加
    group = "com.jayfeng.lesscode"
    

    5. 定义pom并打包aar

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

    // 根节点添加
    install {
        repositories.mavenInstaller {
            // This generates POM.xml with proper parameters
            pom {
                project {
                    packaging 'aar'
                    name 'Less Code For Android'
                    url siteUrl
                    licenses {
                        license {
                            name 'The Apache Software License, Version 2.0'
                            url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
                    developers {
                        developer {
                            id 'jayfeng'
                            name 'jian.feng'
                            email '673592063@qq.com'
                        }
                    }
                    scm {
                        connection gitUrl
                        developerConnection gitUrl
                        url siteUrl
                    }
                }
            }
        }
    }
    

    6. 打包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
    }
    

    7. 上传到Jcenter仓库

    上传到jcenter的网站BinTray,需要用户验证,需要2个值:

    // 示例值, 仅供参考
    // your bintray user name
    // your bintray api key
    bintray.user=openproject
    bintray.apikey=c5434272d522d35d1a0123459981225564155753
    

    第二个API Key就是你在上面记录的API Key。
    因为这个属于个人隐私,一般不能传到网上去,所以需要在记录到LessCode下的local.properties中(利用gitignore忽略这个文件到git),然后脚本再从local.properties中读取这两个值。

    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    bintray {
        user = properties.getProperty("bintray.user")
        key = properties.getProperty("bintray.apikey")
        configurations = ['archives']
        pkg {
            repo = "maven"
            name = "lesscode-core"                // project name in jcenter
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true
        }
    }
    

    完整的build.gradle,请参考LessCode/lesscode-core/build.gradle
    对于需要注意的地方,我都在该行行尾加了#CONFIG#注释字样。

    8. 执行

    根据上面的build.gradle,会产生几个特别的gradle任务:

    javadocJar
    sourcesJar
    install
    bintrayUpload
    

    通过gradew执行这些任务即可。

    gradew javadocJar
    gradew sourcesJar
    gradew install
    gradew bintrayUpload
    

    或者通过Android Studio的最右边栏的Gradle窗口分别可视化操作,点击执行:

    9. 请求审核

    当bintrayUpload成功之后,

    • 在我的主页https://bintray.com/openproject/右下部分Latest Activity块,会看到你提交了一个项目,
    • 从这个Latest Activity列表中点击你的项目,
    • 进入详情页https://bintray.com/openproject/maven/lesscode-core/view,
    • 找到Maven Central标签,
    • 鼠标放上去它会提示你去提交审核,点击进入后,随便写什么都可以了。

    只要上面没问题,一般审核很快,几个小时就差不多了。

    我的情况稍微波折一点,第一个版本0.0.1没有传javadocjar和sourcejar,等了半天,管理员站内信通知审核失败,再传的话需要升级到0.0.2,否则0.0.1已经存在不能重复上传,0.0.2版本上传后,等了半天,管理员告诉我0.0.2版本OK了,但是0.0.1版本还是没上传,于是我找了找能不能删了0.0.1版本,是可以删除的,这样的话其实前面没必要升级到0.0.2了,删了重新上传0.0.1也是可以的。删了之后,还是要按上面的步骤重新发请求审核,等了几个小时就通过了。

    这次审核通过了,后面升级就不用再审核了。

    第三方引用的成就感

    compile 'com.jayfeng.lesscode:lesscode-core:0.1.2'
    

    小结

    相对于android源码或者jar包的形式,开发者可能更乐意以这种方式开源自己的android框架或者组件。

    • 对于使用者来说,引用方式更简单了
    • 对于开发者开说,能够被中心仓库接受,是一种认可。

    更多参考,请查看LessCode

  • 相关阅读:
    题解 CF171G 【Mysterious numbers
    题解 P1157 【组合的输出】
    题解 P3955 【图书管理员】
    题解 P2036 【Perket】
    题解 CF837A 【Text Volume】
    题解 CF791A 【Bear and Big Brother】
    题解 CF747A 【Display Size】
    题解 P1332 【血色先锋队】
    题解 P2660 【zzc 种田】
    题解 P4470 【[BJWC2018]售票】
  • 原文地址:https://www.cnblogs.com/qianxudetianxia/p/4322331.html
Copyright © 2011-2022 走看看