Android Library上傳到JCenter倉庫實踐

前言

這段時間研究了下以前做app開發(fā)的時候并沒有太過關(guān)注的JCenter倉庫,在實際開發(fā)當中通常都是使用第三方開發(fā)者上傳到jcenter的library,而我們使用的這些library或者plugin是怎么發(fā)布到JCenter并讓我使用的? 如果我們想開發(fā)一個Library或者plugin,我們該怎么做?帶著這些問題,我圍繞它做了以下實踐:

  • Android Library上傳到JCenter倉庫實踐
  • Gradle插件開發(fā)實踐-上傳apk文件到Bugly

我會分別以兩篇博客來分享一下我的實踐過程,本篇是入門篇,主要是要告訴大家如何創(chuàng)建一個Android Library并上傳到JCenter,很簡單,相信你看了這篇文章之后以后想發(fā)布一個開源庫給廣大開發(fā)者用不再是問題。

概念普及

JCenter是什么?
jcenter是一個由 bintray.com維護的Maven倉庫。一般我們會這樣定義使用的倉庫:

repositories {
        jcenter()
    }

Maven倉庫又是什么?
你可以理解為存放我們Library的文件服務器。

我們在使用一些開源庫的時候,可能會看到在項目根目錄下的build.gradle有如下配置:

allprojects {
    repositories {
        mavenCentral()
    }
}

mavenCentral又是什么?
我好亂啊,我不想說話。但你還是帶著疑問去Google了,能搜索到的問題我們不問好嗎?
好吧,直接說答案。mavenCentral跟jcenter一樣,都是maven倉庫,只是存放的地方不一樣,不用猜了,它們半毛錢關(guān)系都沒有,有一段時間Android的默認倉庫是mavenCentral,但后來由于它對開發(fā)者不太友好,就把默認倉庫換成了jcenter。

更加詳細的說明,可以參考以下文章:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html

注冊bintray賬號

你要想在bintray上發(fā)布自己的Library就必須有一個創(chuàng)建一個賬號,這里建議直接使用github賬號授權(quán)登錄,這樣以后你開源的倉庫可以在github找到相應的源碼,如果你不想公開的話就另外創(chuàng)建一個賬號了。

注冊bintray賬號

登錄成功之后,你就可以在bintray看到一些著名的倉庫,比如我們開發(fā)者經(jīng)常使用的homebrew。


bintray首頁

創(chuàng)建package

創(chuàng)建package

這里示例創(chuàng)建一個myutils的包,如下圖所示:


創(chuàng)建package1
創(chuàng)建package2

ok,這個時候你創(chuàng)建好了package,后面就可以準備我們開發(fā)好的Library,然后上傳到maven倉庫,繼續(xù)耐心看下面的步驟。

創(chuàng)建一個Android Library

新建一個android project,然后new 一個module,選擇android library,項目結(jié)構(gòu)如下:

項目結(jié)構(gòu) | center

這里我只是為了演示,創(chuàng)建了一個簡單的類:

創(chuàng)建MyUtils類

應用bintray插件

如果想通過bintrayUpload命令上傳library就必須引用相應的插件,配置如下:

 dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:latest.release'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
    }

然后在我們的Library工程的build.gradle引用插件,如下所示:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

其中com.android.library是android的插件,表示它是一個android library。

應用成功后,你會看到插件生成的task,如下圖所示:

bintrayUpload task

通過這個task,我們可以將我們的library上傳到maven倉庫當中,現(xiàn)在還不行,我們還得繼續(xù)完成我們的配置。

build.gradle配置

我們需要在library工程的build.gradle配置我們的相應的信息,下面是示例代碼:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// 這個version是區(qū)分library版本的,因此當我們需要更新library時記得修改這個version
version = "1.0.0"

android {
    compileSdkVersion 19
    buildToolsVersion "23.0.3"
    resourcePrefix "devilwwj_"
    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 21
        versionCode 1
        versionName version
    }
    lintOptions {
        abortOnError false
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
}

def siteUrl = 'https://github.com/devilWwj/Android-Tech'      // 項目的主頁
def gitUrl = 'https://github.com/devilWwj/Android-Tech.git'   // Git倉庫的url
group = "com.devilwwj.library" // Maven Group ID for the artifact,一般填你唯一的包名
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                description 'my utils for test'
                name 'Android Commonly used utils'  //項目描述
                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 { // 開發(fā)者信息
                        id 'YOUR_ID' 
                        name 'YOUR NAME'
                        email 'YOUR EMAIL'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
task javadoc(type: Javadoc) {
    options.encoding = 'UTF-8'
    source = 'src/main/java'
}

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")
    configurations = ['archives']
    pkg {
        repo = "maven"  //發(fā)布到Bintray的那個倉庫里,默認賬戶有四個庫,我們這里上傳到maven庫
        name = "myutils"  //發(fā)布到Bintray上的項目名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

你還需要在local.properties中定義兩行代碼:

bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY

分別是你在bintray的用戶名和apikey,具體可以在你的profile找到。

配置完成后,我們就可以執(zhí)行bintrayUpload命令上傳我們的庫到bintray,可以直接執(zhí)行task或者在命令行敲入以下命令:

gradlew bintrayUpload

如果上傳成功,就會在bintray的網(wǎng)頁看到你的library,例如我通過命令上傳的myutils庫:


這里寫圖片描述

這個時候你已經(jīng)實現(xiàn)通過gradle腳本上傳library到maven倉庫,你可以在本地驗證以下,需要進行在根目錄的build.gradle配置:

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://dl.bintray.com/devilwwj/maven/'
        }

    }
}

這樣我們就可以訪問上傳到maven的library,在項目配置:

配置library

編譯成功之后,可以在External Libraries看到我們從maven倉庫下載下來的library:

myutils庫

但如果你想讓其他開發(fā)者直接使用,需要上傳到Jcenter,而不需要配置maven的地址。

上傳到jcenter

add to jcenter
send to jcenter

完成這些操作之后,你只需等待bintray團隊審核通過,之后其他開發(fā)者只需配置一行代碼就可以使用了。

總結(jié)

關(guān)于使用gradle上傳library到jcenter的實踐基本就這樣,在實踐之前也參考了很多文章,但過程都基本類似,大家可以對比一下,自己按照這些步驟實踐一下,看是否會遇到一些坑,踩坑并填坑的過程就是你經(jīng)驗的積累,我為什么要去了解這些內(nèi)容,筆者以前在開發(fā)app并沒有太關(guān)注這些,但從應用開發(fā)者轉(zhuǎn)變成SDK開發(fā)者之后,從使用輪子到創(chuàng)造輪子的轉(zhuǎn)變,需要我關(guān)注這些,從知道是什么到為什么再到怎么做,這對我們深入學習知識非常重要。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容