Android 進階——上傳Java項目及Android AAR至JCenter遠程倉庫完全攻略(三)

引言

前一篇文章Android 進階——上傳Java項目至JCenter遠程倉庫完全攻略(二)總結了上傳Gradle插件至JCenter並使用的基本知識,這一篇主要總結下上傳AAR到JCenter遠程倉庫的核心流程,其實也不難就是使用官方提供的插件。

一、上傳AAR到JCenter概述

上傳Android項目和上傳Java項目核心步驟大同小異,區別在於上傳AAR的時候要發佈的構件種類不同,原來的maven-publish可能不是很方便,所以替換成專門用於發佈Android項目的插件android-maven-gradle-plugin插件。

二、上傳AAR到JCenter 主要步驟

1、配置兩個插件所在的遠程庫及對應的classpath

/**
 * 配置bintray.gradle:gradle-bintray-plugin插件
 * 和android-maven-gradle-plugin插件的信息
 */
buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    }
}

必須先配置插件的遠程庫和classpath,才能引入這兩個插件

2、引入插件

//引入android-maven插件上傳android項目
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

引入android-maven插件成功之後會在對應的Module下的Gradle Tasks下的other---->install 任務,執行這個任務如果配置沒有出錯的話就會在生成POM文件,如下圖所示:
在這裏插入圖片描述
而引入bintray插件成功之後會在對應的Module下的Gradle Tasks下的publishing---->bintrayUpload 任務,執行這個bintrayUpload任務就是用於上傳配置的工件到JCenter的。

注意:這裏有個天坑,有時候你直接在Tasks 列表下雙擊對應的任務執行的話,會出現莫名其妙的錯誤,但是你只要換成使用命令行去手動指定要執行的任務gradlew :aartest:installgradlew :aartest:bintrayUpload就不會報錯了相同的錯誤了,但是上傳的過程你得確保你有一個足夠好的網絡否則會出現很多問題的。

在這裏插入圖片描述

3、創建自定義task 打包要上傳到JCenter的產物

此處我是把aar和docs都上傳到JCenter。

/**
 * 源代碼打包任務(名爲libaar-1.0-source.jar)
 */
task sourcesJar(type:Jar){
    //如果這裏不配置的話會自動以Module名稱命名
    // baseName "jcaar"
    //分類器,用於區別其他jar包
    classifier "sources"
    //從android main源集中的所有代碼,對應構建腳本中的子節點sourceSets 中的信息
    from android.sourceSets.main.java.srcDirs
}
/**
 * 自定義task 創建android 文檔,因爲Android項目沒有類似Java項目中的[javadoc,groovydoc]
 * 因此需要自己定義task 創建文檔,根據Gradle提供的Javadoc 類傳入指定的參數即可
 * @param Javadoc org.gradle.api.tasks.javadoc
 */
task myjavadoc(type: Javadoc){
    failOnError false //必須添加以免出錯
    options{
        //如果你的項目裏面有中文註釋的話,必須將格式設置爲UTF-8,不然會出現亂碼
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
    }
    source = android.sourceSets.main.java.srcDirs
    //這裏傳入的不是classifier分類器,因爲這個任務的產出不是jar包,把編譯時所有的calsspath傳遞到Javadoc中
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

/**
 * 把自動生成的DOc打包成Jar包(名爲libaar-1.0-doc.jar),
 * 這個docJar 依賴於系統的兩個任務,因爲只有這兩個任務生成doc之後才能把它們的產出打包到一起
 */
task docJar(type: Jar,dependsOn:[myjavadoc]){
    classifier 'doc' //分類器 區分其他jar包
    from myjavadoc.destinationDir
}

4、配置工程產出的工件

/**
 * 配置工程工件 即產出的配置,默認有aar包,沒有docJar
 */
artifacts{
    archives sourcesJar
    archives docJar
}

5、配置bintray

/**
 * 可使用兩種方式進行配置,1)直接在gradle腳本中配置  2)獲取系統單環境變量配置
 *  user = System.getenv('BINTRAY_USER')
 key = System.getenv('BINTRAY_KEY')
 ...
 */
bintray{
    //jcenter的用戶名
    user = 'crazymo'
    //jcenter的用戶名下的API KEY
    key = userkey
    configurations =['archives']
    //添加上傳的包的信息
    pkg {
        repo = 'hiplugin-demo' //需要上傳到的jcenter倉庫名
        name = 'jcaar2'  //上傳的項目名
        //userOrg = 'bintray_user' //jcenter中用戶的org屬性(可選項),對於個人賬號可以不用配置
        licenses = ['Apache-2.0']
        vcsUrl = 'https://aar2.xxxx.git'//可以隨便填寫jcenter 並不能去驗證,如果上傳到github的話可以配置github的地址
        version {
            // name ="1.0" 配置版本名稱如果不配置會默認使用前面的version值
            desc = 'just  aar test'
            released  = new Date()
            vcsTag = '1.0'
            attributes = ['gradle-plugin': 'xxxxx']
        }
    }
}

6、配置android-maven 節點的信息

上傳到jcenter至少需要四個文件,除了打包的aar之外,還需要pom和javadoc,source,否則是通不過jcenter審覈的,這裏的功能相當於是maven-publish插件的publishing節點,具體可以參考android-maven-plugin

/**
 * 這個是android-maven插件提供的,還可以配置很多信息,這只是最簡單的配置,具體可以參考Github上的文檔,
 * project homepage我這裏隨便亂寫的,如果託管在gayHub或者碼雲上可以寫碼雲的位置
 */
def siteUrl = 'https://blog.csdn.net/CrazyMo_'
def gitUrl = 'https://blog.csdn.net/CrazyMo_' // project git
//這裏直接影響POM文件的結構
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                name ' test for Android'
                url siteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        distribution 'repo'
                    }
                }
                developers {
                    developer { //填寫的一些基本信息
                        id 'crazymo'
                        name 'Crazy.Mo'
                        email '[email protected]'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

7、先執行install任務生成POM,再執行bintrayUpload上傳到JCenter。

先執行install任務生成POM,再執行bintrayUpload上傳到JCenter,成功之後還需要點擊Publish All(界面和上一篇有所不同,因爲JCenter 的界面改版了,而我5.21日寫上一篇文章的時候還沒有改版,Add to JCenter 也移到了Action下,Orz…),當需要更新信息或者版本時最後也先執行下install任務
在這裏插入圖片描述
最終完整的上傳腳本uploadaar2jc.gradle(也可以參考GayHub這個腳本


//配置Gradle插件支持的,引入時需要的信息
//最終引用形式對應POM裏的,如compile 'group:artifactId:version'
group "com.crazymo.jcaar"
version 2.0
/***********************引入插件********************************************************/
//引入android-maven插件和bintray插件上傳android項目
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

/***************************引入插件 end*******************************************/

/***************************創建自定義task 打包要上傳到JCenter的產物**********************/
/**
 * 源代碼打包任務(名爲libaar-1.0-source.jar)
 */
task sourcesJar(type:Jar){
    //如果這裏不配置的話會自動以Module名稱命名
    // baseName "jcaar"
    //分類器,用於區別其他jar包
    classifier "sources"
    //從android main源集中的所有代碼,對應構建腳本中的子節點sourceSets 中的信息
    from android.sourceSets.main.java.srcDirs
}
/**
 * 自定義task 創建android 文檔,因爲Android項目沒有類似Java項目中的[javadoc,groovydoc]
 * 因此需要自己定義task 創建文檔,根據Gradle提供的Javadoc 類傳入指定的參數即可
 * @param Javadoc org.gradle.api.tasks.javadoc
 */
task myjavadoc(type: Javadoc){
    failOnError false //必須添加以免出錯
    options{
        //如果你的項目裏面有中文註釋的話,必須將格式設置爲UTF-8,不然會出現亂碼
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
    }
    source = android.sourceSets.main.java.srcDirs
    //這裏傳入的不是classifier分類器,因爲這個任務的產出不是jar包,把編譯時所有的calsspath傳遞到Javadoc中
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

/**
 * 把自動生成的DOc打包成Jar包(名爲libaar-1.0-doc.jar),
 * 這個docJar 依賴於系統的兩個任務,因爲只有這兩個任務生成doc之後才能把它們的產出打包到一起
 */
task docJar(type: Jar,dependsOn:[myjavadoc]){
    classifier 'doc' //分類器 區分其他jar包
    from myjavadoc.destinationDir
}
/***************************創建自定義task 打包要上傳到JCenter的產物 end**************/

/***************************配置工程產出的工件,即要上傳到JCenter的產物****************/
/**
 * 配置工程工件 即jar產出的配置,默認有java jar包,沒有sourcesJar和docJar
 */
artifacts{
    archives sourcesJar
    archives docJar
}

/***************************配置工程產出的工件,即要上傳到JCenter的產物 end****************/

/*************************************配置android-maven 插件的信息******************************************/
// project homepage我這裏隨便亂寫的,如果託管在gayHub或者碼雲上可以寫碼雲的位置
def siteUrl = 'https://blog.csdn.net/CrazyMo_'
def gitUrl = 'https://blog.csdn.net/CrazyMo_' // project git
//這裏直接影響POM文件的結構
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                name 'test for Android'
                url siteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        distribution 'repo'
                    }
                }
                developers {
                    developer { //填寫的一些基本信息
                        id 'crazymo'
                        name 'Crazy.Mo'
                        email '[email protected]'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
/*******************************配置android-maven 插件的信息 end*************************************/

/*******************************配置配置bintray插件的信息************************************/
/**
 * 可使用兩種方式進行配置,1)直接在gradle腳本中配置  2)獲取系統單環境變量配置
 */
bintray{
    //jcenter的用戶名
    user = 'crazymo'
    //jcenter的用戶名下的API KEY
    key = userkey
    configurations =['archives']
    //添加上傳的包的信息
    pkg {
        repo = 'hiplugin-demo' //需要上傳到的jcenter倉庫名
        name = 'cmoaar'  //上傳的項目名Package Name
        //userOrg = 'bintray_user' //jcenter中用戶的org屬性(可選項),對於個人賬號可以不用配置
        licenses = ['Apache-2.0']
        vcsUrl = 'https://aar.xxxx.git'//可以隨便填寫jcenter 並不能去驗證,如果上傳到github的話可以配置github的地址
        version {
            // name ="1.0" 配置版本名稱如果不配置會默認使用前面的version值
            desc = 'just  aar test'
            released  = new Date()
            vcsTag = '1.0'
            attributes = ['gradle-plugin': 'xxxxx']
        }
    }
}
/*******************************配置bintray插件的信息 end*************************************/

點擊Add to JCenter之後審覈成功之後,你可以直接訪問 https://jcenter.bintray.com/你的group/你的artifact/版本號/庫名.pom

三、使用JCenter中 的AAR

與上面使用Jar包核心步驟大同小異,未發佈到JCenter 公共庫的話需要指定地址和對應的classpath 或者直接在構建腳本下的allprojects節點下配置地址(至於爲什麼是在allprojects節點下配置可以參考Android 進階——Android Studio 項目結構詳細述及Gradle腳本語法完全解析(一)

在這裏插入圖片描述
對於已成功審覈的,再在對應Module下的dependencies 下按照compile ‘group : artifactId : version格式來引入依賴。

引入依賴是根據POM來的,與JCenter中配置的Package Name無關

成功引入依賴之後同樣會在默認的遠程緩存庫中看到有三個目錄分別存放pom、sourcesJar、docJar文件
在這裏插入圖片描述
調用aar中的接口方法:
在這裏插入圖片描述
ps:源碼傳送門或者去我的碼雲下去自己下載,下一篇建立自己的Nexus私人代碼倉庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章