1. 程式人生 > 實用技巧 >Android Library 釋出開源庫 JCenter & JitPack 攻略

Android Library 釋出開源庫 JCenter & JitPack 攻略

對於Android 的開源庫,一般通過 JCenter 或者 JitPack 釋出開源。兩種方式均可~

當你造了一個好玩有用的東西想要分享給大家時,開源出來便是一種好方式~

一、 上傳開源庫到 JCenter

1、準備工作

步驟1:註冊Bintray賬號

  1. 儘量不要在官網註冊,因為官網註冊的是企業版,我們需要的是個人版
  2. 直接關聯 Github賬號進行註冊 & 登入(建議)

PS:如果Github賬戶使用了qq郵箱,163郵箱等可能會無法註冊,可以嘗試給Github賬戶 增加一個郵箱例如 Gmail

步驟2:在Bintray上建立倉庫

  1. 在個人中心點選 Add New Repository
  2. Name 框填寫 倉庫名;Type 框 選擇 maven
  3. 點選 Create,完成建立

步驟3:在程式碼專案中建立Module資料夾

  • 步驟如下

    Android Studio中

    1. File --> New Module -> Android Library(注意主專案的Project名不要和Library相同,可能會衝突)
    2. 建立成功後,你會發現Module資料夾的結構和 原有的專案資料夾(app)非常類似

步驟4:將需要上傳的程式碼存放到Module檔案中

  • 本文 以上傳一個 自定義View 為例子
  • 該自定義View程式碼包括:1個類檔案

步驟5:將整個專案上傳到 Github


2、配置與上傳

步驟1:配置 bintray-release 外掛

  • Library ModuleGradle檔案中配置
//Library  build.gradle
    
apply plugin: 'com.novoda.bintray-release' // 新增bintray外掛


publish {
    userOrg = 'dmingou'             // Bintray使用者名稱
    repoName = 'AnimatedFloatingButton'          // Bintray上的新建的倉庫名(Repository)
    groupId =
'qg.odm' // 依賴名 implemention 'x:y:z'中的包名x artifactId = 'AnimatedFloatingButton' // 依賴名implemention 'x:y:z'中的專案名y publishVersion = '1.0.0' // 依賴名implemention 'x:y:z'中的版本號z desc = 'XXXXXXXX' // 對該開源元件的說明 website = 'https://github.com/DMingOu/AnimatedFloatingButton' // VCS地址 }

注意:儘量保持你的library module的名字同artifactId一樣

原因:Bintray上,你的專案的 maven-metadata.xml 檔案的路徑 為 gruopId+"/"+module名稱。

​ 假設你的groupId=qg.odm,artifactId是AnimatedFloatingButton,但module名稱是AnimatedFloatingButtonLibrary。
​ 此時,專案檔案在qg.odm.animatedfloatingbuttondemo目錄下的,但maven-metadata.xml檔案卻是在qg.odm/AnimatedFloatingButtonLibrary目錄下的,可能會有衝突。

衝突:若你有多個專案groupId一樣 & artifactId不一樣,但module名稱都是library的話,maven-metadata.xml檔案的地址可能會一樣,即都是:gruopId+"/"+module名稱,那麼就可能產生衝突。

解決方案:保持module名稱和artifactId一致。

  • 在該專案的Gradle檔案中配置

使用外掛前應該看下最新版本 Bintray-release 的github地址

//Project  build.gradle
classpath 'com.novoda:bintray-release:0.9.2'

allprojects {
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}
allprojects {
    tasks.withType(Javadoc) {
        options{
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

步驟2:上傳專案到JCenter中

  • AndroidStudioTerminal輸入以下命令
// 每行命令均用空格隔開,此處是為了展示才會分行

<-- Windows版本 -->
gradlew.bat clean build bintrayUpload 
 -PbintrayUser=UserName  // Bintray使用者名稱
 -PbintrayKey=*********  // Bintray上的API key
 -PdryRun=false

<-- Mac版本 -->
./gradlew clean build bintrayUpload 
 -PbintrayUser=carson-ho 
 -PbintrayKey=***************************** 
 -PdryRun=false
//一行命令直接在Terminal執行,例子如下
gradlew clean build bintrayUpload -PbintrayUser=dmingou -PbintrayKey=610e0e8f022cb3f353908e083932167bd0ff -PdryRun=false

  • 上傳成功提示如下:

  • 注:一般來說不會一次成功,可能出錯的問題(坑),詳情拉到末尾總結

  • 到這一步,你已經將專案上傳到 JCenter了,可進入檢視到 Package 已被新增進去

步驟3:新增到JCenter

  • 請按照以下步驟真正新增該專案到JCenter
    1. 進入倉庫–>點選對應Package–>點選右上方的 Actions --> 選擇 Add to JCenter
    2. 在彈出的對話方塊中新增 對提交內容的備註,簡單描述即可
  • 提交申請後,需要等待 管理員稽核通過(x小時),會以 站內私信方式通知

  • 收到官方的通知,說明別人就可直接通過 新增你的依賴 來引用你的 Library 了!

3、檢視如何依賴

在對應的 Package 頁點選對應的版本號,在Maven Info中可以檢視


4、版本更新

當需要進行Android Library版本更新時,只需要以下2個步驟:

步驟1:在該Library ModuleGradle檔案中的配置2中 重新配置版本號,其他的都不用更改!!

步驟2:重新執行上傳程式碼

AndroidStudioTerminal輸入以下命令

//一行命令直接在Terminal執行,例子如下
gradlew clean build bintrayUpload -PbintrayUser=dmingou -PbintrayKey=610e0e8f022cb3f353908e083932167bd0ff -PdryRun=false

等待一定時間,就可以看到 Bintray網站上更新了Android Library的新版本。

5、上傳到 Bintray 時遇到的坑

MacOS可能出現的坑

// 錯誤日誌:說明許可權有問題
bash: ./gradlew: Permission denied

// 解決方案:獲得許可權,直接在終端輸入以下命令
chmod +x gradlew

坑:Could not publish XXXX HTTP/1.1 404 Not Found [message:Package ‘XXXX’ was not found]

研究一番,類似的錯誤還有 **Not Found Repo …**網上回答清一色是說配置中寫錯了或者檢查下空格問題。然後我認真檢查發現無錯後,我直接按原來的命令,再次執行,然後居然就 Build Successful 了,有點玄學

坑:Please fix the following before submitting a JCenter inclusion request:Add a POM file to the latest version of your package

bintray網站,Package上傳成功後,點選“add to jcenter”按鈕時,提示以上資訊。

  • 上傳到bintray的命令列
gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
  • 其實上面的命令列可以分解為2個task:
gradlew clean build
gradlew bintrayUpload.........
  • 點選“add to jcenter”時提示的異常資訊,意思是上傳的最新版本里面缺少了pom檔案,而通過bintray-release外掛上傳,執行命令時如果沒有生成,則需要我們手動生成
gradlew clean build bintrayUpload...

解決辦法就是手動執行task。那什麼時候執行?怎麼執行呢?

步驟1、什麼時候執行?

在gradlew clean build 和 gradlew bintrayUpload… 兩個Task之間執行;

步驟2、怎麼執行?

首先在android studio 中開啟gralde task檢視,先後右擊run執行下面的兩個Task即可;

執行完以後,對應module下的build目錄會生成對應的pom檔案

再按照如上操作,然後再去官網點選“add to jcenter”按鈕即可順利進入申請介面

二、釋出開源庫到 JitPack

準備工作

在Github上傳需要開源的專案,與 上傳JCenter步驟中的準備工作對專案程式碼的操作類似。

參照 上傳JCenter開源 的 準備工作的 步驟3,步驟4,步驟5

步驟一、在專案的build.gradle新增外掛android-maven-gradle-plugin

classpath ‘com.github.dcendents:android-maven-gradle-plugin:2.1’

PS:jitpack的android-maven-gradle-plugin版本要和gradle版本對應。具體的對應呢?檢視官方說明~~

如下圖:

步驟二、配置library的build.gralde

在library的 build.gradle中新增程式碼

// JitPack Maven
apply plugin: 'com.github.dcendents.android-maven'
// 其中username需要替換為你在github上的使用者名稱
group='com.github.username'

如下圖所示:

修改後的部分要提交到github上去!!

步驟三、建立release版本

1、開啟專案的github主頁,建立一個Release或Tag

2、填寫釋出內容
  1. 填寫你要釋出的release程式碼庫的版本(重要)
  2. 標題名字,一般填寫開源庫的名字
  3. 本次release提交的描述
  4. 點選 Publish relsease 按鈕

3、釋出成功後可檢視到記錄

步驟四、提交到 JitPack

1、將Github專案的倉庫提交到 JitPack

綁定了賬戶後,可以在左方的 Repositories欄挑選;也可以在輸入框中填入 釋出release的專案地址

Log欄是綠色,代表OK,點選 Get It 按鈕,版本提交完成後,JitPack會自動生成引用該library的配置資訊:

2、在下方可以看到如何引用依賴你剛釋出的程式碼庫了

在專案依次新增這兩處,就可以使用釋出的程式碼庫了

謝謝閱讀的同學~,希望文章能對您有用