Gradle打包并发布aar

作者: SaiWu | 来源:发表于2015-11-23 21:11 被阅读6753次

    以前使用开源库比较常用做法是下载源码包,通过import library引入。但通常我们都不需要修改源码,而且升级的时候又要去下载一次源码再替换,显得比较麻烦。后来转用Android Studio之后自带gradle构建项目,通过依赖管理轻松实现更新第三方库。我也开始把我的开源项目转为Android Studio,并提供aar包给开发者进行依赖。现在就开始介绍下怎么打包并发布aar。

    环境

    Android Studio 1.0+
    OSX 10.9+

    建立项目

    在Android Studio中新建一个Project。以我的PickerView控件为例,New 一个项目名叫 PickerViewDemo 的项目。
    然后之后在 PickerViewDemo 下会有一个build.gradle(Project:PickerViewDemo),在buildscript里面的dependencies中添加两个classpath:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.0.0'
            //请加入下面两行
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
            classpath 'com.github.dcendents:android-maven-plugin:1.2'
            // 高版本的gradle改为
            // classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
        }
    }
    

    建立真正的需要打包成aar的library库

    在当前PickerViewDemo的project中New一个Module,那么我的叫 PickerView,这个就是要打包成aar并发布的依赖库了。
    PickerView下也有一个build.gradle(pickerview),我们需要配置这个build.gradle。拷贝覆盖掉这个 build.gradle,然后请看注释来修改成你的。

    apply plugin: 'com.android.library'
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    version = "1.0.1"   // #修改# // 这里是aar的版本号
    
    android {
        compileSdkVersion 21
        buildToolsVersion "20.0.0"
    
        defaultConfig {
            minSdkVersion 9
            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'])
        compile 'com.android.support:appcompat-v7:21.0.3'
    }
    
    def siteUrl = 'https://github.com/saiwu-bigkoo/Android-PickerView'                        // #修改# // 项目的主页地址,我这里是我的PickerView项目在github的链接地址
    def gitUrl = 'https://github.com/saiwu-bigkoo/Android-PickerView.git'                     // #修改# // 项目 git 地址,我这里同样是用Github上的git地址
    group = "com.bigkoo"             // #修改# // 组名称,这个相当于依赖的时候 compile 'com.bigkoo:pickerview:1.0.1' “:”号前面的前缀
    
    install {
        repositories.mavenInstaller {
            // This generates POM.xml with proper parameters
            pom {
                project {
                    packaging 'aar'
                    name 'PickerView 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 'sai'                                           // #修改# // 你的userid,昵称
                            name 'sai.wu'                                       // #修改# // 用户名
                            email 'sai.wu@bigkoo.com'                               // #修改# // 邮箱
                        }
                    }
                    scm {
                        connection gitUrl
                        developerConnection gitUrl
                        url siteUrl
                    }
                }
            }
        }
    }
    
    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
    }
    
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    bintray {
        user = properties.getProperty("bintray.user")
        key = properties.getProperty("bintray.apikey")
        // 上面两个 user和key 需要留意一下,在local.properites 里面配置的
        configurations = ['archives']
        pkg {
            repo = "maven"
            name = "PickerView"                                                 // #修改# //  在 jcenter 上面的项目名字
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true
        }
    }
    

    然后我们需要到 Bintray 上进行注册登录, 完成后到编辑界面左边菜单,查看API Key,点击show就能看到你的key了。接下来请拷贝这个key,然后回到项目中。
    local.properites 加入两行配置:

    bintray.user=这里填写你在Bintray中的user名字
    bintray.apikey=这里是你刚刚拷贝的key
    

    local.properites 文件因为有你的隐私信息,所以如果上传到git上面,记得排除掉不要上传哦~~(即在.gitignore里面加入local.properties以忽略版本控制)

    打包和提交

    用终端进入到 PickerViewDemo的根目录。然后执行

    ./gradlew build  // 第一次上传可能需要 ./gradlew install
    ./gradlew bintrayUpload //上传到Bintray
    

    上面已经传到Bintray上面了,接下来回到 Bintray 网站,到个人主页,右下角Latest Activity 中会出现你刚刚上传的项目,如我的是PickerView,那么这就是你已经传到仓库中了,然后到Jcenter 中点击 Include My Package
    选择这个项目,然后提交等待审核。

    依赖

    审核通过后,在build.gradle(Module:app)dependencies里面加入

    compile 'com.bigkoo:pickerview:1.0.1'//这是我的例子,请替换成你自己的
    

    sync gradle 一下,就会自动下载aar并依赖,嗯,这样就完成了。

    相关文章

      网友评论

      本文标题:Gradle打包并发布aar

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