天天看點

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

  在Adnroid Studio中,如果你想在你自己的項目中引用其他任何的第三方庫。隻需要在項目的build.gradle中添加如下簡單的一行代碼。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

 就這樣,這個library庫還不能被使用。

  這個看起來很酷,但是你可能好奇,這個庫Android Studio 是從哪裡查詢來的呢?這篇部落格将會詳細介紹整個工作流程,包括怎樣釋出你自己的庫,并分享給世界其他地方的開發者。這不僅使世界變得美好,而且讓你自己看起來也很牛x。

 Android Studio 從哪裡擷取庫?

 先從第一個簡單的問題開始,相信你也不是完全知道Android Studio從哪裡擷取到庫。難道是谷歌給我們搜尋出來的,并下載下傳到了我們的項目中麼?

 好吧,這個并不是完全正确的。Android Studio 從 Maven 存儲庫伺服器中下載下傳庫檔案,這個被我們定義到了build.gradle中。(Apache Maven是Apache工具,它提供了一個分發庫的檔案伺服器)。基本上這裡隻有2個标準的伺服器用于托管Android的庫,如JCenter和Maven Central。

JCenter

JCenter 是由bintray.com托管的Maven存儲庫。你可以在這裡http://jcenter.bintray.com/找到整個倉庫。

為了在你自己的工程中使用這個倉庫,你需要定義一個倉庫,像下邊這樣,在build.gradle檔案中。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

Maven Central

Maven 是由sonatype.org托管的Maven存儲庫。你可以在這裡https://oss.sonatype.org/content/repositories/releases/找到整個倉庫。

為了使用Maven 存儲庫,你可以定義一個倉庫,像下邊這樣,在build.gradle檔案中

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

需要注意一點,盡管JCenter和Maven Central 是兩個标準的安卓存儲倉庫,但是他們被托管在兩個完全不同的地方。由兩個提供者提供,并且互相之間沒有任何的關聯。在Maven Central中可能找不到jcenter中可用的内容,反之亦然。

除了這兩個标準的伺服器,我們還可以自己定義特定的maven存儲庫伺服器,以防我們使用一些開發人員的庫來自己的伺服器上托管他們的庫。在這種情況下,Twitter的Fabric.io在https://maven.fabric.io/public上托管自己的Maven Repository。如果你想使用任何Fabric.io的庫,你必須定義自己存儲庫的位址連接配接,像下邊這樣。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

随後你可以通過相同的方法,使用任何庫檔案。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

但是哪一個更好呢:将庫上傳到标準伺服器或托管我們自己的伺服器?答案是前一種。是我們自己的庫可以被公共使用。另一個開發人員不應該定義任何東西,除了一行代碼定義依賴項的名稱。是以在這篇文章中,我們将專注于隻有JCenter和Maven Central,為開發人員提供更好的體驗。

除了Maven Repository之外,FYI實際上還有一種類型的存儲庫,他與AndroidStudio上的gradle一起使用,他被成為常春藤存儲庫,但從我自己的經驗來看,我從來沒有見過任何人使用它,之前包括我。是以我将知識在這篇文章中忽略這種類型的存儲庫。

了解JCenter和MavenCentral

 想知道為什麼那裡隻有一個,但是有兩個标準的存儲庫?

 事實上,它們具有相同義務的粗出庫:托管Java/Android庫。将開發人員的庫上傳到哪一個或兩者可以使開發人員的選擇。

 首先,Android Studio 選擇Maven Central作為預設的存儲庫。一旦你從舊版的Android Studio 建立一個新的工程,mavenCentral()将會自動在build.gradle中定義。

 但是呢,有個比較嚴重的問題,Maven Central 對開發人員并不友好。而且将庫檔案上傳到這裡是很困難的。為了能夠上傳成功,開發人員需要一定的能力。而且還有一些更多的原因,例如安全問題等等。Android Strudio 團隊決定将預設存儲庫切換為JCenter,因為您可以看到,一旦您從最新版本的AdnroidStudio建立一個新項目,JCenter()将自動被定義而不是mavenCentral()。

他們決心從Mavnen Central 切換到JCenter有許多的理由。這裡有一些比較主要的:

  -jcenter 分發庫是通過CDN,這就意味着開發人員可以體驗很快的下載下傳速度。

  -jcenter 是世界上最大的java 存儲庫。是以無論在Maven Central中提供什麼,都可以在jcenter上獲得。換句話說,    jcenter是maven Central 的超集。

  -将我們自己的庫上傳到存儲庫也是非常容易的。不需要簽署或者做任何複雜的事情,就像我們必須在maven centr      上。      -優化的UI     -如果你想将自己的庫檔案上傳到maven central,你可以輕松的點選bintray網站(和一次性設定一些步驟)。

    綜合以上觀點并且從我的個人體驗上來說,我不得不說這真是一個聰明的決定,轉換預設的倉庫到jcenter。

  是以本篇文章将着重介紹jcenter,直至你能自己成功的上傳自己的庫檔案到jcenter。之後可以輕松轉發給maven central。

gradle是如何從倉庫裡拉取一個庫檔案的呢?

在我們講如何上傳一個庫檔案到jcenter之前,我們應該先說說gradle是如何從一個倉庫中擷取庫檔案。例如,當我們在build.gradle中鍵入下面的内容時,這些庫檔案如何神奇的下載下傳到您的項目中呢?

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

首先我們應該先了解這些庫檔案字元串的含義。它包含三個部分:

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

以上面的内容為例,GROUP_ID 是com.inthecheesefactory.thecheeselibrary, ARTIFACT_ID 是fb-like ,VERSION是 0.9.3.

也就意味着,GROUP_ID 是用來定義庫組的名稱。在同一個上下文中,可能會有多個庫檔案在不同的工作中工作。如果庫位于同一個組中,它講共享相同的GROUP_ID。一般來說,我們将其命名為開發人員的軟體包名稱,然後使用庫組的名稱,例如com.squareup.picasso。然後在ARTIFACT_ID中定義庫的真實名稱。對于VERSION,隻是一個版本号。雖然它可以是對任何文本,但是我建議将其設定為x.y.z的格式,如果需要,可能會跟随-bate。

 這裡有一些關于Square的真執行個體子。你可以注意到,每個人都可以很容易地認知庫和開發者的名字。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

添加了以上依賴以後,将會發生一些什麼呢?簡單來說,Gradle 将會詢問Maven 存儲伺服器,這個依賴庫是否存在,如果存在,gradle将會根據GROUP_ID/ARTIFACT_ID/VERSION來請求庫檔案,比如,你可以找到com.squareup:otto:1.3.7從http://jcenter.bintray.com/com/squareup/otto/1.3.7和 https://oss.sonatype.org/content/repositories/releases/com/squareup/otto/1.3.7/.。

找到檔案之後呢,AndroidStuido 将會下載下傳這些檔案到我們本地,并且根據我們的需求編譯項目。就這樣,整個過程沒有什麼複雜的。

我相信你應該清楚的知道從存儲庫中提取的庫檔案,不是在存儲庫伺服器上托管的jar或者aar檔案。它比較像是自己的項目檔案。但是,從gradle獲得的依賴系統獲得的最大收益是你不必做任何事情,隻需輸入一些文本即可。庫檔案将會很快的應用的您的項目中,也可以用于版本控制系統。

了解一個aar檔案格式

等等,我說有兩種可以在倉庫,jar和aar上托管的庫檔案。jar檔案是什麼,我相信大家都知道。但是什麼事aar檔案呢? aar檔案是在jar檔案之上開發的。這是由Android Library需要嵌入一些Android 特定的檔案(如AndroidManifest.xml,Resources,Assets 或者 JNI等),而這些不是jar檔案的标準。是以aar被發明來涵蓋所有這些内容。基本上它是一個普通的zip檔案,就像jar一樣,但是其中具有不同的檔案結構。jar檔案嵌入到具有classes.jar名稱的aar檔案中。其餘的列在下面:

- /AndroidManifest.xml (mandatory)

- /classes.jar (mandatory)

- /res/ (mandatory)

- /R.txt (mandatory)

- /assets/ (optional)

- /libs/*.jar (optional)

- /jni/<abi>/*.so (optional)

- /proguard.txt (optional)

- /lint.jar (optional)

正如你看到的,aar檔案是專門為Android設計的。是以本文将教你如何以aar格式建立和上傳庫。

如何上傳自己的庫檔案到jcenter

現在,我相信你應該有一些基本的知識了解倉庫的整個工作流程。現在讓我們開始最重要的部分:上傳工作。目标是如何将我們的庫檔案上傳到http://jcenter.bintray.com。一旦我們能做到,這個庫将會被發表。但是呢,有兩件事需要被關注一下:如何建立一個aar檔案,以及如何将内置檔案上傳到存儲庫?

雖然他需要一些步驟,但我必須說,這個完全不難,因為bintray已經準備好一切,都很友善,你可以現在下圖中了解整個過程。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

 而且由于有很多細節,是以讓我把這個過程分解成7個部分,這樣我可以一步一步的講解。

 Part1:在bintray上建立一個package   首先呢,你需要在bintray上建立一個package。在建立這個之前,你需要先在bintray上建立一個賬号,然後才能建立一個package。  Step1:在bintray點選打開連結上注冊一個賬号,整個過程很簡單,自己操作就好。  Step2:注冊成功後,登入網站,首界面中點選

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

建立新的存儲庫,并選擇Maven類型  

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

Step3:給我們的庫檔案建立一個新的package。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

Step4:填寫基本的資訊。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

盡管這裡沒有明确說明PackageName有哪些規則,但是這裡有一些名稱約定的規則。隻需将所有的字元設定為小寫,并用連字元-分隔每個單詞,例如fb-like。

填好所有的資訊後,點選create package按鈕,完成建立過程。

Step 5:網站将會重定向到編輯包界面,點選編輯封包本下的包名,進入包的詳細資訊頁面。

至此,在bintray上你就有了自己的maven倉庫,可以準備上傳庫檔案到倉庫中。Bintray賬戶注冊現已完成。下一個可以使用的是Sonatype,即Maven Central提供商。

Part 2:給Maven Central建立一個Sonatype賬戶。

注意:如果你不打算上傳庫到Maven Central,則可以跳過第2部分和第3部分。無論如何,我建議你不要跳過,因為有很多開發人員仍在使用這個存儲庫。

就像JCenter一樣,如果要通過Maven Central分發你的庫檔案,你需要在其提供商網站Sonatype注冊一個賬戶。

你需要知道的是你必須建立的賬戶是Sonatype站點上的JIRA問題跟蹤器賬戶。為此,請轉到Sonatype Dashboard,然後注冊一個賬戶。

一旦你完成了,你必須要求将自己的庫檔案分發給Maven Central。無論如何,這個過程根本沒有任何意義(至少對我來說),因為你要做的是在JIRA中建立一個問題,讓他們允許你上傳你提供給Maven Central 的GROUP_ID的圖書館。

要建立一個類似的問題,請轉到Sonatype Dashboard并使用建立的賬戶進行登入。然後點選頂部菜單中的建立按鈕。

請填寫以下資訊: Project:社群支援-開源項目存儲庫托管 Issue Type:新項目 Summary:你的庫的名稱總結,例如Cheese Library Group Id:GROUP_ID,例如com.inthecheeselibrary。獲得準許後,每個庫都将以com.inthecheeselibrary開頭,将被允許上傳到存儲庫,例如com.inthecheeselibrary.somelib Project URL:項目路徑,通常放置github上的項目路徑。 SCM URL:源代碼控制的URL,通常放置的也是github上的源代碼路徑。

儲存其餘未修改的内容,然後點選建立。然後等待一周或這個更多時間,之後你将被授予通路權限,以将你的庫檔案分發到Maven Central。

最後一件事是在Bintray Profile的賬戶頁籤中提供你的Sonatype OSS的使用者名

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

Part 3:啟用自動登入Bintray

如上所述,我們可以通過JCenter将庫檔案上傳到Maven Central,但是要做到這一點,我們需要首先簽署這個庫檔案。bintray提供了一個技巧,可以輕松地通過web界面進行操作,進而允許庫在上傳後自動簽名。

第一步是通過指令行通過以下指令生成一個密鑰。如果你是用的是windows,請在cygwin下執行。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

這裡有一些必須填寫的字段。預設值可以應用于大多數部分,但是對于某些字段,你需要自己輸入适當的值,比如你的真實姓名,密碼等。

一旦密鑰建立成功,使用下面的指令來擷取建立的密鑰的更多資訊。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

如果沒有問題的,相關資訊将會如下展示

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

現在我們必須将公鑰上傳到密鑰伺服器,使其有效。為此,請在本示例中的01ABCDEF的pub行中的2048R /之後,調用以下指令并将PUBLIC_KEY_ID替換為8位十六進制值。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

然後,使用以下指令将公鑰和私鑰作為ASCII标準格式導出,并将[email protected]替換為上一步中用于建立自己的密鑰的電子郵件。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

打開Bintray的編輯檔案界面,找到GPG Signing.使用上一步導出的public_key_sender.asc和private_key_sender.asc檔案中的内容填充公鑰和私鑰。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

點選update,儲存更新。

最後一步,找到主界面中的maven倉庫

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

點選Edit按鈕,進入編輯界面

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

勾選GPG Sign uploaed files automatically 

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

點選update按鈕,儲存目前操作,就這樣,從現在開始,上傳到我們的maven存儲庫的每個library都将自動簽名,并可以一鍵點選轉發給maven central。

請注意,這是一次一次性的操作,并且也将應用于在此之後建立的每個單獨的庫。

Bintray 和 maven central現在已經準備好了,現在轉入到Android studio 的部分。

Part 4 :準備好一個Android Studio工程。

在很多情況下,我們可能需要将多于1個庫上傳到單個項目中的存儲庫,同時我們可能不需要上傳任何内容。是以我建議最好的結構是将每個部分分為子產品。基本上我建議你拆分至少兩個子產品,一個應用子產品用于庫使用示例,另一個是一個庫子產品,其中包含你要上傳到存儲庫的源代碼。請注意,如果你想在項目中擁有多個庫,請随意建立另一個子產品,最好是每一個庫,對應一個子產品。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

我相信每個人都知道如果建立一個library module,是以這在個子產品就不往深入講解了。建立一個簡單的library子產品

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

下一步應用bintray的配置到自己的工程中。為了完成這個,我們需要在工程的build.gradle檔案中添加如下部分依賴。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

将gradle建構工具版本設定為1.1.2或者更高版本是很重要的,因為在以前的版本中存在嚴重的錯誤。在這個例子中我們使用最新的1.2.3.

接下來,我們将通過修改local.properties來定義用于bintray身份驗證的使用者名和api密鑰以及建立密鑰的密碼。我們需要把這些東西放在這個檔案中,原因是這些資訊是敏感資訊,身份資訊,不應該被分享到任何地方,包括版本控制。幸運的是,自建立項目以來,該local.properties檔案已經添加到.gitignore。是以,這些敏感資料将無法無意上傳到git伺服器。

在local.properties這裡添加三行配置代碼

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

第一行是使用者名,第二行是app_key,在bintray中的edit profile界面中可以獲得。第三行是gpg密碼,建立好之後儲存。

最後一個需要編輯的檔案是build.gradle ,打開并且添加以下代碼

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

将bintrayName更改為上面建立的包名稱,并且還可以更改其餘的配置資訊。從上面的腳本中,每個人都可以使用這個庫檔案,使用以下的gradle内容添加依賴

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

最後一步是應用兩個腳本,用于建構庫檔案,并将建構的檔案上傳到bintray,通過在檔案末尾附加相同的build.gradle檔案(為了友善,我使用的是github托管的檔案的直接連結)

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

完成!現在你可以準備上傳庫檔案到bintray了。

Part 5 : 上傳庫檔案到你的bintray空間。

現在可以上傳庫檔案到你的bintray了,做如下操作,請打開android studio 的Terminal控制台

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

第一步是檢查代碼的正确性,并建構庫檔案(aar,pom等),鍵入以下指令來執行此操作。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

如果這裡沒有什麼問題,将會顯示

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

現在我們已經進行了一半,下一步是使用以下指令将内置檔案上傳到bintray。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

如果他顯示如下所示,那麼就是成功了。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

在bintray web界面檢查你的包,你會在版本區域看到版本變化。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

點選它,并檢視檔案頁籤,你将看到上傳的庫檔案放在這裡。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

恭喜你,你自己的庫檔案已經上傳成功,并且任何人都可以使用它了。

但是呢,不要高興的太早了,這個庫檔案現在僅僅是在你自己的maven存儲庫中,還沒有到jcenter中。如果有其他的開發者想使用這個庫檔案,他們必須添加如下依賴

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

你可以從bintray web界面找到你自己的maven 倉庫的連結,或者隻是用你的bintray使用者名替換nuuneoi的。我希望你自己嘗試點開這個連結,看看裡面究竟發生了哪些變化。

如上所述,共享庫的最佳做法不是讓開發人員定義這樣的複雜的東西。想象一下,我們必須添加10個網址來使用這10個存儲庫麼?這簡直是噩夢,是以讓我們的庫檔案從我們的存儲庫傳遞到jcenter,将極大的提高開發人員的使用者體驗。

Part 6 :同步自己的庫檔案到Jcenter

同步自己的庫到JCenter,這個過程是很簡單的,隻需要在網頁上點選Add to JCenter即可,

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

然後什麼都可以不填,直接點選發送按鈕即可。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

接下來就是需要等待2-3個小時,需要bintray團隊稽核通過。一旦同步申請通過,你就會收到一封郵件,提醒你已經稽核通過。稽核通過以後可以檢視網頁接口,你将可以在Linked To 界面看到一些變化。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

從這以後,任何的開發者都可以通過Jcenter倉庫,使用你的庫檔案了,隻需要添加以下簡單的一行代碼。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

想檢查你的庫二進制檔案是否存在,你可以通路http://jcenter.bintray.com 并浏覽到與你的庫的組ID和工件ID比對的目錄,比如在上這個例子中,位址應該是com -> inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

請注意,連結到JCenter是一次性的動作,從現在開始,如果你在包中進行任何修改,例如上傳新版本的二進制檔案,删除舊版本的二進制檔案等。此更改也會影響到Jcenter位于不同的位置,是以你可以需要等待2-3分鐘左右,才能讓Jcenter同步更改。

請小心一下,如果你決定删除整個軟體包,則在這種情況下,放置在JCenter存儲庫中的庫檔案将不會被删除,而他們像僵屍檔案一樣,沒有人可以删除她了。是以我建議你,如果你想删除整個軟體包,請先删除web界面中的每一個版本,然後再删除軟體包。

Part 7 :将庫檔案轉發到Maven Central

并不是所有的安卓開發者都使用JCenter庫,仍有一部分開發者使用mavenCentral,是以将庫上傳到Maven Central 也是同樣重要的。

将存儲庫從Jcenter轉到Maven Central,你需要首先實作兩個任務:

 1)Bintray包必須已經連結到Jcenter

 2)Maven Central 上的存儲庫已經被準許開放

如果你已經通過了這些資格,将庫檔案轉發到 Maven Central 的方法非常簡單。隻需要在軟體包詳細資訊頁面上點選Maven Central 連結。

如何通過JCenter 和 Mavenue Central 從 Android Studio 分發自己的Library庫

一旦成功完成,成功同步和關閉的回購将顯示在上次同步狀态。但是如果有任何問題,他将顯示在上次同步錯誤中。你必須根據情況修複問題,因為可以上傳到Maven Central的庫條件是相當嚴格的,例如 + 号不能再庫的依賴關系定義的版本中使用。

一旦完成你可以在Maven Central 倉庫中找到與庫group/artifact ID 相比對的目錄中的二進制檔案。在這個例子中,應該是com -> inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3

恭喜你,已經成功了。雖然它需要相當多的步驟,但步驟是非常簡單的。大部分是一次性的,一旦設定成功後,你幾乎不需要做其他額外的步驟。

文章有點長,但希望對你是有幫助的。希望能在這裡看到你偉大的庫檔案!!!

翻譯文章, 文章來源:

https://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en

在最新版本的上傳過程中,可能界面展示略有不同, 大緻的操作過程是一樣的,希望對你有幫助。

繼續閱讀