Android 上傳開源項目到 jcenter 實戰踩坑之路

来源:https://www.cnblogs.com/nesger/archive/2019/07/05/11137730.html
-Advertisement-
Play Games

本文微信公眾號「AndroidTraveler」首發。 背景 其實 Android 上傳開源項目到 jcenter 並不是一件新鮮事,網上也有很多文章。 包括我本人在將開源項目上傳到 jcenter 的時候也是參考了一些文章。 不過由於版本和環境問題,很多很早以前寫的文章並不完全適用。 基於此,這邊 ...


本文微信公眾號「AndroidTraveler」首發。

背景

其實 Android 上傳開源項目到 jcenter 並不是一件新鮮事,網上也有很多文章。

包括我本人在將開源項目上傳到 jcenter 的時候也是參考了一些文章。

不過由於版本和環境問題,很多很早以前寫的文章並不完全適用。

基於此,這邊總結一下近期(2019-07-02)我上傳開源項目到 jcenter 的實戰踩坑之路。

上傳的開源項目是 Android 6.0 動態許可權申請的項目。

基於軟體的單一職責原則,我這裡就不展開講了。

本篇文章主要講上傳開源項目到 jcenter 的實戰踩坑之路,後續如果需要再單獨另寫一篇文章介紹這個開源項目。

開發環境

設備:iMac
Android Studio 版本:3.2.1
java version:1.8.0_45

實戰踩坑之路

1. 讓項目跑起來

由於我這個開源項目是兩年半前寫的,所以要先保證 pull 下來的項目可以正常跑起來。

果然,控制台輸出下麵信息

No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android

明明之前可以 run 起來的。看來是因為 AndroidStudio 升級版本的問題。

這邊的解決方法就是升級 gradle 版本

將原本的

classpath 'com.android.tools.build:gradle:2.2.2'

升級為

classpath 'com.android.tools.build:gradle:3.2.1'

然後其他的做相應調整,項目就可以正常運行到設備上面了。

2. 將要上傳的開源項目獨立成一個 Module

之前開源項目是把所有代碼都放在 app Module 裡面。

其他小伙伴使用前需要把相關文件夾拷貝到自己的項目裡面。

這裡的 Module 抽取其實做的是類似的事情,就是把相關文件遷移到新建的待上傳 Module。

3. 新建 bintray.com 賬號

我們要上傳開源項目到 jcenter,首先得要有一個賬號。

你以為新建賬號很簡單?

這裡面還是有不少坑的。容我一一道來。

網站為 https://bintray.com/

點擊進去,第一個坑來了。

image.png

如圖所示,個人開發者要點擊右邊。不要看到左邊的按鈕顏色鮮艷並且有個 FREE 字眼就去點了。

因為 START YOUR FREE TRIAL 的意思是開始你的免費試用,試用說明有期限,所以你懂了吧。

點擊右邊之後,進入註冊界面。

為了方便,我用的是第三方登錄。

一開始我點擊 Sign up with Github

結果填寫完資料之後點擊完成註冊,但是界面沒有任何反應。

最後發現是 QQ 郵箱的關係。

後面改為點擊 Sign up with Google,結果賬號順利創建了。

所以第二個坑就是註冊郵箱或者使用第三方註冊的郵箱需要是 Gmail 郵箱。

這邊親測的結論是 QQ 郵箱不可以,Gmail 郵箱可以。其他的郵箱就不清楚了。

這就是註冊賬號的第二個坑。

4. 創建 maven 倉庫

登錄進入主頁後,點擊 Add New Repository

第一個和第二個必填。Name 填 maven,Type 選擇 Maven 即可。

如果這一步沒有操作,在最後上傳的時候會報錯。

5. 引入 bintray-release

在項目的 build.gradle 文件的 dependencies 塊裡面增加下麵語句:

classpath 'com.novoda:bintray-release:0.9.1'

在要上傳的 Module 的 build.gradle 添加如下語句:

在文件頂部添加:

apply plugin: 'com.novoda.bintray-release'

在文件末尾添加:

publish {
    userOrg = 'zengyuzhan'                                         //bintray.com 賬號用戶名
    groupId = 'com.zengyu'                                        //唯一 id,最後依賴的庫名組成部分之一
    artifactId = 'permission'                                    //倉庫名
    publishVersion = '1.0.0'                                    //版本號
    desc = 'for android dynamic request permission'            //描述
    website = 'https://github.com/nesger/PermissionManager'   //開源項目網址
}

publish 書寫之後,後面依賴的引入就是 implementation 'groupId:artifactId:publishVersion'

具體到上面例子就是

implementation 'com.zengyu:permission:1.0.0'

這一步驟有一些坑,比如 classpath 的引入這裡,我引入版本為 0.8.1 的時候,報瞭如下錯誤:

Cause: com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set;

引入版本為 0.6.1 時,報錯:

No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage

引入版本為 0.3.4 時,報錯:

Unable to load class 'org.gradle.api.internal.component.Usage'.

修改為最新版本的 0.9.1 之後就沒問題了。所以假設當你看到這篇文章按照上面引入時報錯,可以到官網 GitHub 看下最新版本是否是 0.9.1。

GitHub 官網:https://github.com/novoda/bintray-release

6. 上傳開源庫

在項目根目錄執行上傳命令,直接在 Android Studio 的 Terminal 面板輸入命令即可。

./gradlew clean build bintrayUpload -PbintrayUser=zengyuzhan -PbintrayKey=xxxxxx -PdryRun=false

其中 PbintrayUser 指定的是你註冊的 bintray.com 賬號的用戶名。PbintrayKey 指定的是你 bintray.com 網站的 API Key。

按照下圖獲取 API Key:

點擊拷貝按鈕拷貝到剪貼板即可,需要使用的話再粘貼。

等到 Terminal 編譯成功之後,會顯示 BUILD SUCCESSFUL。

這邊編譯的時候出了一個錯誤,如下:

Execution failed for task ':permission:javadocRelease'.
> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): 

這個是 Javadoc 任務報錯,我不需要這個,因此解決方法是不執行上面的 task :permission:javadocRelease

在項目的 build.gradle 文件的 allprojects 語句塊中,增加下麵語句:

tasks.getByPath(":permission:javadocRelease").enabled = false

可以看到小括弧裡面就是上面報錯的 task。

如果你的 Javadoc 報錯 task 跟我這個不一致(大概率不一致,跟 Module 名有關係),那麼你就要進行對應修改。

添加之後 Sync 項目再上報就沒這個問題了。

7. Add to JCenter

上傳完成之後,我們還需要到 bintray.com 網站上面點擊 Add to JCenter,然後等待審核才算大功告成。

因為上面的項目我已經發佈成功並且點擊了,所以我用另一個開源庫來演示這個步驟。

進入首頁,點擊 maven:

可以看到你開源的所有包名:

點擊最新上傳但是還沒有添加到 Jcenter 的庫。

點擊 Go to Old Look

可以看到 Add to JCenter 按鈕。點擊

簡單寫下對這個庫的描述即可。

點擊 Send 之後網頁會顯示一個提示。接下來就等待郵箱通知就可以了。

審核完畢之後你進來就不會看到 Add to JCenter 按鈕了。

比如我之前審核通過的庫:

之後你就可以像引用其他三方庫一樣引用到你的項目中了。

總結如下:

本文演示的倉庫為:https://github.com/nesger/PermissionManager

有不清楚的可以留言或者直接查看我演示倉庫的提交記錄和源碼。

參考鏈接:
https://blog.csdn.net/lmj623565791/article/details/51148825
https://www.jianshu.com/p/6f808c29e378
https://blog.csdn.net/anydrew/article/details/51286998


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vs連接Mysql資料庫步驟 1、 首先下載mysql資料庫,安裝,建庫建表 https://www.yiibai.com/mysql/getting-started-with-mysql-stored-procedures.html (這個超鏈接是關於Mysql的學習資料,個人認為很不錯!) 2、 ...
  • 資料庫單表數據量太大可能會導致資料庫的查詢速度大大下降(感覺都是千萬級以上的數據表了),可以採取分區分表將大表分為小表解決(當然這隻是其中一種方法),比如數據按月、按年分表,最後可以使用視圖將小表重新併為總的虛擬表,其實並不影響上層程式的使用(程式也許都不知道分表了)。 主要步驟: 1、新建文件組, ...
  • 1. 背景 當系統的微服務化做的不是很高的時候,部分功能要通過DB LinkServer 來實現跨 Server 查詢,當然,有時候BI抽數據、DBA資料庫維護可能也會創建LinkServer。 特別是當 DB遷移的時候,我們需要檢查、創建 DB LinkServer。 2.腳本實現 下麵是我們創建 ...
  • 這個博主寫的非常好,直接附上連接。 數據表創建參數介紹一http://blog.itpub.net/17203031/viewspace-688011/ 數據表創建參數介紹二 http://blog.itpub.net/17203031/viewspace-688047/ 數據表創建參數介紹三 ht ...
  • 在網上搜索了很多次oracle表空間查詢語句,現在記錄下來 查詢oracle表空間大小: 其中包含了當前的表空間和臨時表空間總空間大小和當前使用情況,突然看到其中包含臨時表空間語句,產生了一些興趣,度了一番之後,如下: 臨時表空間使用情況 創建臨時表空間,比起普通表空間多了temporary關鍵字 ...
  • 在做項目的過程中。我發現有許多地方有用到游標的方式去實現功能效果的。所以,整理了有關常用的實現游標的方式。 一、什麼是游標 維基百科中事這樣定義游標的。游標是處理結果集的一種機制 ,而結果集就是select查詢返回的所有行數據的集合。 對於我而言,用通俗的話來講,就是把自己需要用到的數據先放到一個容 ...
  • 前言: 摸索學習Xamarin的應用,以此博客跟進學習進度。 介紹: Xamarin 提供了用於移動設備、平板電腦和桌面應用程式的跨平臺開發解決方案。Xamarin 產品依賴於 Apple 和 Google 中的平臺 SDK 才能面向 iOS 或 Android,因此系統要求應與這些平臺的要求匹配。 ...
  • 首先寫佈局文件activity_main.xml: 原理:實現全屏的時候把webview里的視頻放到一個View(佈局里的video_view控制項)裡面,然後把webview隱藏掉!這樣就實現了全屏播放的!現在具體來看看怎麼實現的:先放代碼MainActivity.java: 最後說下Android ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...