如何把自己的 open source library 上傳到 bintray
開發 App 的過程中,總是會需要透過 jcenter 這類的 repository 載入別人寫好的 library,只要在 gradle 檔案中的 dependencies 區塊中指定好路徑,IDE 就會自動幫你下載好,切換版本也非常容易,覺得這功能真的很方便,如果把自己 App 的部份功能 open source 出來,然後透過 jcenter 來管理發佈,不僅可以更乾淨的模組化,同時也許有些人可能剛好也用的上,於是便花了點時間研究一下,同時把過程做個紀錄。
這次我要上傳的 project 是一個提供查詢電子發票的 library einvoice_sdk,source code 已經建立好新的 repository 且完成上傳到 Github。它的主要功能是提供解析發票一維條碼以及 QR Code 內容,以及查詢載具/實體發票內容,讓有需要開發電子發票應用的人,不需要再處理 http 參數的處理,以及解析回傳的 JSON 結構。
Bintray 設定
要把 library 發布到 jcenter 前,會需要有 Bintray 的帳號:
可以用 email 申請,或是透過 Github 或是 Google 的帳號登入。
成功登入之後,先建立用來放置 library 的 repository,點擊 “Add New Repository”
Name: Repository 名稱,這裡我設定為 “Maven”,這個待會兒在 build.gradle 會參考到。
Type 請記得選 “Maven”,選擇適合的 License 後點擊 “Create” ,你的 Repository 就建立好了,接著在這個 Repository 建立新的 Package。
在 package 頁面填入幾個需要的欄位:
Name: package 的名稱,待會的 build.gradle 裡要參考用的
Licenses: 從選單中選擇一個適合的即可
Version Control: 填入 Github 的 link
建立好 package 之後,接著取得 API key,這個一樣是在設定 build.gradle 時需要使用,點擊 Edit Profile
點擊 API Key 複製內容,Bintray 這邊的設定就暫時告一段落,接下來設定 build.gradle
設定 Project level build.gradle
這裡先回到 Android Studio 中,開啟 project level 的 build.gradle,加入 bintray dependency
開啟 local.properties,在裡面加入兩個變數 “bintray.apikey” 與 “bintray.user”,這個 apikey 就是在前面從 profile 頁面裡的 key。
因為一般而言,由 Android Studio 建立的 project 會包含 .gitigonore 檔案,裡面預設會將 “local.properties” 這個檔案排除加入到 git 裡,所以習慣會把有隱密的資料放到這裡。
設定 Module level build.gradle
接著打開 module level 的 build.gradle,加入兩個 plugin
加入 bintray 區塊,除了設定帳號與 API key 外,要注意這裡指定了要同時上傳的 maven publications (pom 檔案) “myPublish” 。
接著加入 publishing 區塊:
這樣就完成 module level 的 build.gradle 了。
打開 Android Studio 側邊的 Gradle panel,在 Tasks 底下的 publishing 區塊應該會有一個 “bintrayUpload” 的 task,點擊執行,順利的話大概幾秒鐘就可以完成上傳。
接著再次回到 bintray 網站,打開先前建立的 “Maven” repository 裡的 “einvoice_sdk”,應該就可以看到剛剛上傳的 library。
剛上傳的第一個版本還不能使用,需要管理員核可,所以先點進去 package,在右下角有個 “Add to JCenter” 的按鈕,點擊後就會送出審核要求。
大概幾個小時內就能得到核可的訊息。
這樣就代表其他人已經可以透過 jcenter 查詢並下載你的 library 了。
使用方式就是 groupId:moduleName:version 的格式,以我的例子而言就是
implementation 'com.kevinchung0921:einvoice:1.3@aar'
要注意一點,預設是下載 jar 檔,如果你的 library 只提供 aar 檔,記得使用的時候後面要加上 “@aar”,不然還是會出現找不到 library 的錯誤。