第一部分:在bintray上創建package

首先,你需要在bintray上創建一個package。為此,你需要一個bintray賬號,并在網站上創建一個package。

第一步:在bintray.com上注冊一個賬號。(注冊過程很簡單,自己完成)

第二步:完成注冊之后,登錄網站,然后點擊maven。

第三步:點擊Add New Package,為我們的library創建一個新的package。

第四步:輸入所有需要的信息

雖然如何命名包名沒有什么限定,但是也有一定規范。所有字母應該為小寫,單詞之間用-分割,比如,fb-like。

當每項都填完之后,點擊Create Package。

第五步:網頁將引導你到?Package編輯頁面。點擊?Edit Package文字下的Package名字,進入Package詳情界面。


完工!現在你有了自己在Bintray上的Maven倉庫,可以準備上傳library到上面了。

Bintray賬戶的注冊就完成了。下一步是Sonatype,Maven Central 的提供者。

第二部分:為Maven Central創建個Sonatype帳號

你需要知道的就是這個帳號,你需要在Sonatype網站上創建一個IRA Issue Tracker 帳號。請到Sonatype Dashboard?注冊這個帳號。

完成之后。你需要請求得到貢獻library到Maven Central的權限。不過這個過程對我來說有點無厘頭,因為你需要做的就是在JIRA中創建一個issue,讓它們允許你上傳匹配Maven Central提供的GROUP_ID的library。

要創建上述所講到的issue,訪問Sonatype Dashboard,用創建的帳號登錄。然后點擊頂部菜單的Create。

填寫如下信息:

Project:?Community Support - Open Source Project Repository Hosting

Issue Type:?New Project

Summary:?你的?library名稱的概要,比如The Cheese Library。

Group Id: 輸入根GROUP_ID,比如,com.inthecheeselibrary 。一旦批準之后,每個以com.inthecheeselibrary開始的library都允許被上傳到倉庫,比如com.inthecheeselibrary.somelib。

Project URL: 輸入任意一個你想貢獻的library的URL,比如,?https://github.com/nuuneoi/FBLikeAndroid。

SCM URL:?版本控制的URL,比如?https://github.com/nuuneoi/FBLikeAndroid.git。


其余的不用管,然后點擊Create。現在是最難的部分...耐心等待...平均大概1周左右,你會獲準把自己的library分享到?Maven Central。

最后一件事是在Bintray Profile的帳戶選項中填寫自己的Sonatype OSS用戶名。

點擊Update,完成。

第三部分:啟用bintray里的自動注冊

就如我上面提到的,我們可以通過jcenter上傳library到Maven Central ,不過我們需要先注冊這個library。bintray提供了通過用戶界面讓library一旦上傳后自動注冊的機制。

第一步是使用下面的命令行產生一個key。(如果你用的是windows,請在cygwin下做這件事情)

gpg?--gen-key

有幾個必填項。部分可以采用默認值,但是某些項需要你自己輸入恰當的內容,比如,你的真實名字,密碼 等等。

創建了key之后,調用如下的命令查看被創建key的信息。

gpg?--list-keys

如果沒沒問題的話,可以看到下面的信息:

pub???2048R/01ABCDEF?2015-03-07
uid??????????????????Sittiphol?Phanvilai?<yourmail@email.com>
sub???2048R/98765432?2015-03-07

現在你需要把key上傳到keyserver讓它發揮作用。為此,請調用如下的命令并且將其中的PUBLIC_KEY_ID替換成上面pub一行中2048R/ 后面的?8位16進制值,譬如本例是01ABCDEF。

gpg?--keyserver?hkp://pool.sks-keyservers.net?--send-keys?PUBLIC_KEY_ID

然后,使用如下的命令以ASCII形式導出公共和私有的key,請將yourmail@email.com替換成你前面用于創建key的email。

gpg?-a?--export?yourmail@email.com?>?public_key_sender.asc
gpg?-a?--export-secret-key?yourmail@email.com?>?private_key_sender.asc

打開Bintray的Edit Profile頁面點擊GPG 注冊。分別在Public Key和?Private Key中填入上一步導出的public_key_sender.asc和?private_key_sender.asc文件中的內容。

點擊Update保存這些key。

最后一步就是啟用自動注冊。到Bintray的主頁點擊maven。

點擊編輯

勾選中GPG Sign uploaed files automatically以啟用自動注冊。

點擊Update保存這些步驟。完成。現在只需點擊一下,每個上傳到我們Maven倉庫的東西都會自動注冊并做好轉向Maven Central 。

請注意這是一次性的操作,以后創建的每一個library都要應用此操作。

Bintray和Maven Central 已經準備好了。現在轉到Android Studio部分。

第四部分:準備一個Android Studio項目

很多情況下,我們需要同時上傳一個以上的library到倉庫,也可能不需要上傳東西。因此我建議最好將每部分分成一個Module。最好分成兩個module,一個Application Module一個Library Module。Application Module用于展示庫的用法,Library Module是library的源代碼。如果你的項目有一個以上的library,盡管創建另外的module:1個 module對應1 個library。

我相信大家知道如何創建一個新的module,因此就不會深入講解這個問題了。其實很簡單,基本就是選擇creating an?Android Library?module ,然后就完了。

下一步是把bintray插件應用在項目中。我們需要修改項目的build.gradle文件中的依賴部分,如下:

dependencies?{classpath?'com.android.tools.build:gradle:1.2.3'classpath?'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'classpath?'com.github.dcendents:android-maven-plugin:1.2'
}

有一點非常重要,那就是gradle build tools的版本設置成1.1.2以上,因為以前的版本有嚴重的bug,我們將使用的是最新的版本1.2.3

接下來我們將修改local.properties。在里面定義api key的用戶名以及被創建key的密碼,用于bintray的認證。之所以要把這些東西放在這個文件是因為這些信息時比較敏感的,不應該到處分享,包括版本控制里面。幸運的是在創建項目的時候local.properties文件就已經被添加到.gitignore了。因此這些敏感數據不會被誤傳到git服務器。

下面是要添加的三行代碼:

bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY
bintray.gpg.password=YOUR_GPG_PASSWORD

bintray username 放在第一行,?API Key放在第二行,?API Key可以在Edit Profile頁面的API Key 選項卡中找到。

最后一行是創建?GPG key的密碼。保存并關閉這個文件。

最后要修改的是module的build.gradle文件。注意前面修改的是項目的build.gradle文件。打開它,在apply plugin: 'com.android.library'之后添加這幾行,如下:

apply?plugin:?'com.android.library'ext?{bintrayRepo?=?'maven'bintrayName?=?'fb-like'publishedGroupId?=?'com.inthecheesefactory.thecheeselibrary'libraryName?=?'FBLike'artifact?=?'fb-like'libraryDescription?=?'A?wrapper?for?Facebook?Native?Like?Button?(LikeView)?on?Android'siteUrl?=?'https://github.com/nuuneoi/FBLikeAndroid'gitUrl?=?'https://github.com/nuuneoi/FBLikeAndroid.git'libraryVersion?=?'0.9.3'developerId?=?'nuuneoi'developerName?=?'Sittiphol?Phanvilai'developerEmail?=?'sittiphol@gmail.com'licenseName?=?'The?Apache?Software?License,?Version?2.0'licenseUrl?=?'http://www.apache.org/licenses/LICENSE-2.0.txt'allLicenses?=?["Apache-2.0"]
}

bintrayRepo使用默認的,即maven。bintrayName修改成你上面創建的?package name。其余的項也修改成和你library信息相匹配的值。有了上面的腳本,每個人都能通過下面的一行gradle腳本使用這個library。

compile?'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'

最后在文件的后面追加兩行如下的代碼來應用兩個腳本,用于構建library文件和上傳文件到bintray(為了方便,我直接使用了github上連接到相關文件的鏈接):

apply?from:?'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
apply?from:?'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'

完成!你的項目現在設置好了,準備上傳到bintray吧!

第五部分:把library上傳到你的bintray空間

現在是上傳library到你自己的bintray倉庫上的時候了。請到Android Studio的終端(Terminal)選項卡。

第一步是檢查代碼的正確性,以及編譯library文件(aar,pom等等),輸入下面的命令:

>?gradlew?install

如果沒有什么問題,會顯示:

BUILD?SUCCESSFUL

現在我們已經成功一半了。下一步是上傳編譯的文件到bintray,使用如下的命令:

gradlew?bintrayUpload

如果顯示如下你就大喊一聲eureka吧!

SUCCESSFUL

在bintray的網頁上檢查一下你的package。你會發現在版本區域的變化。

點擊進去,進入Files選項卡,你會看見那里有我們所上傳的library文件。

恭喜,你的library終于放在了互聯網上,任何人都可以使用了!

不過也別高興過頭,library現在仍然只是在你自己的Maven倉庫,而不是在jcenter上。如果有人想使用你的library,他必須定義倉庫的url,如下:

repositories?{maven?{url?'https://dl.bintray.com/nuuneoi/maven/'}
}...dependencies?{compile?'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'
}

譯者注:前面都沒怎么看懂,看到上面的代碼之后一下子全懂了,呵呵。

你可以在bintray的web界面找到自己Maven倉庫的url,或者直接吧nuuneoi替換成你的bintray用戶名(因為前面部分其實都是一樣的)。我還建議你直接訪問那個鏈接,看看里面到底是什么。

但是,就如我們前面所講的那樣,讓開發者去定義url這種復雜的事情并不是分享library的最佳方式。想象一下,使用10個library不得添加10個url?所以為了更好的體驗,我們把library從自己的倉庫傳到jcenter上。

第六部分:同步bintray用戶倉庫到jcenter

把library同步到jcenter非常容易。只需訪問網頁并點擊Add to JCenter

什么也不做直接點擊Send。

現在我們所能做的就是等待bintray團隊審核我們的請求,大概2-3個小時。一旦同步的請求審核通過,你會收到一封確認此更改的郵件。現在我們去網頁上確認,你會在?Linked To?部分看到一些變化。

從此之后,任何開發者都可以使用jcenter() repository 外加一行gradle腳本來使用我們的library了

compile?'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'

想檢查一下自己的library在jcenter上是否存在?你可以直接訪問http://jcenter.bintray.com,然后進入和你library的group id 以及artifact id匹配的目錄。在本例中就是com?->?inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3。

請注意鏈接到jcenter是一個只需做一次的操作。如果你對你的package做了任何修改,比如上傳了一個新版本的binary,刪除了舊版本的binary等等,這些改變也會影響到jcenter。不過畢竟你自己的倉庫和jcenter在不同的地方,所以需要等待2-3分鐘讓jcenter同步這些修改。

同時注意,如果你決定刪除整個package,放在jcenter倉庫上的library不會被刪除。它們會像僵尸一樣的存在,沒有人再能刪除它了。因此我建議,如果你想刪除整個package,請在移除package之前先在網頁上刪除每一個版本。

第七部分:上傳library到Maven Central

并不是每個安卓開發者都使用jcenter。仍然有部分開發者還在使用mavenCentral()?,因此讓我們也把library上傳到Maven Central 吧。

要從jcenter到Maven Central,首先需要完成兩個任務:

1) Bintray package 已經連接到jcenter。

2) Maven Central上的倉庫已經認證通過

如果你已經通過了這些授權,上傳library?package到Maven Central就異常簡單了,只需在package的詳情頁面點擊Maven Central 的鏈接。

輸入你的Sonatype用戶名和密碼并點擊Sync。

如果成功,在Last Sync Status中會顯示Successfully synced and closed repo(見圖),但是如果遇到任何問題,則會在Last Sync Errors顯示出來。你需要根據情況修復問題,能上傳到Maven Central 的library的條件是相當嚴格的,比如+ 號是不能在ibrary版本的依賴定義中使用的。

完成之后,你可以在??Maven Central Repository?上找到你的library。在那些匹配你ibrary的group id以及artifact id的目錄中。比如本例中就是com?->?inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3。

恭喜!雖然需要許多步驟,但是每一步都很簡單。而且大部分操作都是一勞永逸的。