如何釋出一個Android庫

heinika1476775901521發表於2017-12-14

經常在github上看到通過類似的語句引進別人的庫:

repositories { 
    jcenter()
}
dependencies {
    compile 'com.flipboard:bottomsheet-core:1.5.0' 
    compile 'com.flipboard:bottomsheet-commons:1.5.0' // optional
}
複製程式碼

不得不說,使用起來真方便。那如果自己有好的庫,如何分享給其他人,或者放在Bintray,方便自己使用呢?

###釋出第一個Android庫(想想還是有點小激動)

先到bintray.com註冊,註冊之後獲取API-Key:

api-key.png

必須要特別感謝這位作者:Ashraff Hathibelagal

code.tutsplus.com/zh-hans/tut… 基本上都是按照他的教程做的。 也參考了XRecyclerView的gradle,也表示感謝.

文章雖好,但也有坑.... 於是自己又整理了一下

主要分兩步:

1,像往常一樣寫一個library

2,釋出到Bintray

這裡需要修改兩個gradle。

Project build.gradle

// 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:2.0.0'

        /*
        第 1 步:新增必要的外掛
        為了在 Android Studio 裡與 Bintray 互動,你應該把 Bintray 外掛引入到專案的 build.gradle 檔案的 dependencies 裡。
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
        因為你要把庫上傳到 Maven 倉庫,你還應該像下面這樣新增 Maven 外掛。
        classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"
         */
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
        classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

複製程式碼

Module build.gradle

apply plugin: 'com.android.library'
/*
第 2 步:應用外掛
開啟您的庫模組的 build.gradle 檔案並新增以下程式碼,以應用我們在上一步中新增的外掛。
 */
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
/*
第 3 步: 指定 POM 詳細資訊
在上傳庫時,Bintray 外掛會尋找 POM 檔案。 即使 Maven 外掛為你生成了它,你也應該自己指定
 groupId 標籤和 version 標籤的值。 要這樣做,請使用 gradle檔案中的group 和version 的變數。
 */
version = "1.0.0"
group = "com.example"


def siteUrl = 'https://github.com/heinika/MyHelloWorldLibrary'
def gitUrl = 'https://github.com/heinika/MyHelloWorldLibrary.git'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
}

/*第 4 步: 生成源 JAR
為了遵守 Maven 標準,你的庫也應該有一個包含了庫的原始檔的 JAR 檔案。
 為了生成 JAR 檔案,需要建立一個新的 Jar任務,
 generateSourcesJar,並且使用 from 功能指定的原始檔的位置。*/
task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier 'sources'
}

/*
第 5 步: 生成 Javadoc JAR
我們同樣推薦,在你的庫裡有一個包含 Javadocs 的 JAR 檔案。
 因為目前你還沒有任何 Javadocs,需要建立一個新的 Javadoc 任務,generateJavadocs,來生成它們。
  使用 source 變數來指定原始檔的位置。 你還應該更新 classpath 變數,以便該任務可以找到屬於 Android SDK 的類。
 你可以通過把 android.getBootClasspath 方法的返回值新增給他,來這麼做。
 */
task generateJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

/*下一步,要從 Javadocs 生成 JAR,需要建立 Jar 任務,generateJavadocsJar
,並把 generateJavadocs 的 destinationDir 屬性傳遞給它的 from 功能。
為了確保在 generateJavadocsJar 任務只在 generateJavadocs 任務完成後才開始,
需要新增下面的程式碼片段,它使用了 dependsOn 方法來決定任務的順序:
您的新任務應如下所示:*/
task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) {
    from generateJavadocs.destinationDir
    classifier 'javadoc'
}

/*
 *第 6 步: 引入生成的 JAR 檔案
 *為了把源和 Javadoc JAR 檔案匯入到 artifacts 的列表裡,你應該把他們的任務的名字新增到 configuration 裡,
 * 稱為 archives,artifacts 列表將被上傳到 Maven 倉庫。 使用下面的程式碼片段來完成:
 */
artifacts {
    archives generateJavadocsJar
    archives generateSourcesJar
}

/*第 7 步: 執行任務
現在是執行我們在前幾步裡建立的任務的時候了。 開啟 Gradle Projects 視窗,搜尋名為 install 的任務。*/

/*
第 8 步: 配置 Bintray 外掛
要配置外掛,你應該使用 Gradle 檔案中的 bintray 閉包。 首先,使用與你的 Bintray 使用者名稱和 API 金鑰對應的 user 和 key 變數進
行身份驗證。在 Bintray,你的庫會被放置在 Bintray package 裡。 你應該使用 pkg 閉包裡命名直觀的 repo、 name、licenses 和
vcsUrl 引數,提供詳細的相關資訊, 如果這個包不存在,會為你自動建立。當你將檔案上傳到 Bintray 時,他們會與 Bintray 包裡的一
個版本相關聯。 因此,pkg 必須包含一個 version 閉包,閉包的 name 屬性要設為獨一無二的名稱。 另外,你還可以使用 desc,
released 和 vcsTag引數來提供描述、 釋出日期和 Git 標籤。
最後,為了指定應該上傳的檔案,要把 configuration 引數的值設為 archives。
bintray {
    user = 'test-user'
    key = '01234567890abcdef01234567890abcdef'
    pkg {
        repo = 'maven'
        name = 'com.github.hathibelagal.mylittlelibrary'

        version {
            name = '1.0.1-tuts'
            desc = 'My test upload'
            released  = new Date()
            vcsTag = '1.0.1'
        }

        licenses = ['Apache-2.0']
        vcsUrl = 'https://github.com/hathibelagal/LibraryTutorial.git'
        websiteUrl = 'https://github.com/hathibelagal/LibraryTutorial'
    }
    configurations = ['archives']
}
 */
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("BINTRAY_USER")
    key = properties.getProperty("BINTRAY_KEY")
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = "MyHelloWorldLibrary"    //釋出到JCenter上的專案名字

        version {
            name = '1.0.1-tuts'
            desc = 'My test upload'
            vcsTag = '1.0.0'
        }

        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}
/*
第 9 步: 使用 Bintray 外掛上傳檔案
再次開啟 Gradle Projects 視窗,搜尋 bintrayUpload 任務。 雙擊它,啟動上傳檔案。*/
/*
一旦任務完成,你就能開啟瀏覽器來訪問你的 Bintray 包的詳細資訊頁面。 你會看到一個通知,
說你有四個未釋出的檔案。 如果要釋出這些檔案,單擊 Publish 連結。 */
/*
* 使用 Bintray 裡的庫
你的庫現在已經可以作為 Bintray 包使用了。 只要你分享了你的 Maven 倉庫的 URL,加上 group ID、artifact ID 和 version number,
任何開發人員都可以訪問你的庫。 例如,為了使用我們剛才建立的庫,開發人員必須引入下面這個程式碼片段:
repositories {
    maven {
        url 'https://dl.bintray.com/eruzza/maven'
    }
}
dependencies {
    compile 'com.github.hathibelagal.librarytutorial:mylittlelibrary:1.0.1@aar'
}
注意,在把庫新增為 compile 依賴之前,
開發人員必須顯式地在 repositories 列表裡,引入你的倉庫。*/

/*
 * Bintray的使用者手冊:https://bintray.com/docs/usermanual/
 */
複製程式碼

上傳成功

將庫新增到 JCenter

預設情況下,Android Studio 會搜尋一個名為 JCenter 的倉庫裡面的庫。 如果你把自己的庫引入到了 JCenter 儲存庫,開發人員就不必向他的 repositories 裡新增任何東西了。

要將你的庫新增到 JCenter,需要開啟瀏覽器並訪問你的 Bintray 的包的詳細資訊頁面。 單擊 Add to JCenter 按鈕

接著你進入一個頁面,讓你填寫一些資訊。 你可以用 Comments 區域來提及任何關於這個庫的細節。 單擊 Send 按鈕,啟動 Bintray 的審查過程。 在一兩天以內,Bintray 的工作人員會把你的庫連結到 JCenter 倉庫,這樣你就將能在你的包的詳細資訊頁面上,看到指向 JCenter 的連結了。 任何開發人員現在都可以使用你的庫,而無需更改 repositories 列表。

通過後點選JCenter如圖

使用

以後用到這個庫的時候,只需要下面一句就可以了。是不是很爽,哈哈哈哈。

compile 'com.example:myfristlibrary:1.0.0'
複製程式碼

專案地址:https://github.com/heinika/MyHelloWorldLibrary 原文地址:http://heinika.github.io/2016/04/13/%E5%8F%91%E5%B8%83%E7%AC%AC%E4%B8%80%E4%B8%AAAndroid%E5%BA%93(%E6%83%B3%E6%83%B3%E8%BF%98%E6%98%AF%E6%9C%89%E7%82%B9%E5%B0%8F%E6%BF%80%E5%8A%A8)/

相關文章