AndroidStuio快速發布開源項目到Jcenter/Bintray

來源:互聯網
上載者:User

標籤:

AndroidStuio快速發布開源項目到Jcenter/Bintray

著作權聲明:轉載請註明本文轉自嚴振傑的部落格: http://blog.csdn.net/yanzhenjie1003

QQ交流群1:46505645
QQ交流群2:46523908
群資源有限,請不要重複加群,謝謝。

前言

  最近做了兩個開源項目,一個是Android網路架構NoHttp,和Volley、OkHttp一樣做用戶端請求的,更多相關資訊請百度哦;另一個是Android Web伺服器架構AndServer,用來在Android端搭建一個web伺服器的架構,類似Java的Servlet一樣,更多相關資訊參見這篇部落格。
  為什麼要說上面這一段,一個是想給自己宣傳一下;另一個是這兩個架構都支援Gradle一句話依賴使用,有人就問我,自己的開源項目怎麼支援AndtoidStudio的gradle compile依賴呢?所以這裡寫一篇部落格教程。

必要的準備工作
  • AndroidStudio、Gradle和自己的開源項目這個必須有。
  • Jcenter是Bintray下的一個倉庫,所以Bintray帳號必須的,沒有的同學看下文如何申請。
  • 網路必須是暢通的,要能訪問https://bintray.com
如何申請Bintray帳號

  沒有Bintray帳號的同學到Bintray官網申請,進入頁面後點擊右上方的Sign In登入,如果有帳號的人可以直接登入了,沒有帳號的同學點擊下面的Sign Up註冊帳號,操作流程:

第一步,登入或註冊入口

  點擊Sign In按鈕登陸或者註冊。

第二步,登入或者到註冊頁面

  有帳號直接登入,或者用第三方帳號(Github、Twwiter,Google+)登入,如果沒有帳號就點擊Sign Up註冊:

第三步,註冊帳號並啟用

  根據提示輸入相關資訊註冊,郵件地址灰常重要,一定填自己最常用的,找回密碼等用得到,註冊好之後會收到一封啟用的郵件,根據提示啟用就好了。

第四步,拿到自己的ApiKey

  apikey是我們發布項目到Jcetner時必須要用的,拿到ApiKey後儲存起來等下要用,步驟如下:
  

4.1開啟個人配置頁面,並點擊[Edit]

  拿到apikey必須要先登入,登入成功後,右上方原來顯示Sign In的地方顯示的自己的使用者名稱,滑鼠指向使用者名稱的時候有一個下拉式功能表,我們需要點擊Your Profile,出現的頁面左偏上角你的頭像和使用者名稱下面有一個[Edit],圖示:

4.2輸入登入密碼複製ApiKey

  點擊Edit後出來的新頁面,選擇左側的[API Key],會出來如下頁面,輸入你登入密碼點擊下方的Submit後會顯示一個ApiKey,圖示:

  輸入密碼後點擊Submit後顯示如下,滑鼠選中文字後複製並儲存(注意不要點擊Revoke it,這是撤銷這個ApiKey的意思):

設定項目gradle和local.properties

  我們上傳項目到Jcenter時使用Gradle的task自動完成,所以只需要配置好gradle一句話就可以完成上傳了,下面是項目中的配置。
  正式開始之前我們上一張圖,這裡以AndServer為例:

(一)設定項目的gradle檔案

  我們項目一般會有多個gradle設定檔,第一步要配置的是項目的gradle,而不是module/library的gradle,也就是[項目的gradle]標註的檔案,你的項目中應該只有dependencies節點下的代碼不一樣:
  這是修改之前的:

buildscript {    repositories {        jcenter()    }    dependencies {        classpath ‘com.android.tools.build:gradle:2.1.2‘    }}allprojects {    repositories {        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

  這是修改之後的:

buildscript {    repositories {        jcenter()    }    dependencies {        classpath ‘com.android.tools.build:gradle:2.1.2‘        // 添加下面兩行代碼即可。        classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3‘        classpath ‘com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4‘    }}allprojects {    repositories {        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}
(二)配置要上傳的library/module的gradle檔案

  第二步要配置的是要上傳的module的gradle,而不是整個項目的gradle,也就是[library的gradle]標註的檔案:
  這是修改之前的:

apply plugin: ‘com.android.library‘android {    compileSdkVersion 23    buildToolsVersion "23.0.3"    defaultConfig {//      applicationId "com.yanzhenjie.andserver.sample" // 這一行要刪除,因為library不允許有applicationId。       minSdkVersion 8        targetSdkVersion 23        versionCode 1        versionName ‘1.0.1‘    }}dependencies {    // 如果你的library有依賴別的jar,這裡要把jar依賴進來。    compile fileTree(dir: ‘libs‘, includes: [‘*.jar‘])}

  這是修改之後的:

apply plugin: ‘com.android.library‘// 這裡添加下面兩行代碼。apply plugin: ‘com.github.dcendents.android-maven‘apply plugin: ‘com.jfrog.bintray‘android {    compileSdkVersion 23    buildToolsVersion "23.0.3"    resourcePrefix "andserver_res_"    defaultConfig {     // applicationId "com.yanzhenjie.andserver.sample" // 這一行要刪除,因為library不允許有applicationId。        minSdkVersion 8        targetSdkVersion 23        versionCode 1        versionName ‘1.0.1‘    }}dependencies {    // 如果你的library有依賴別的jar,這裡要把jar依賴進來。    compile fileTree(dir: ‘libs‘, includes: [‘*.jar‘])}// 項目引用的版本號碼,比如compile ‘com.yanzhenjie:andserver:1.0.1‘中的1.0.1就是這裡配置的。version = "1.0.1"// 定義兩個連結,下面會用到。def siteUrl = ‘https://github.com/yanzhenjie/AndServer‘ // 項目首頁。def gitUrl = ‘[email protected]:yanzhenjie/AndServer.git‘ // Git倉庫的url。// 唯一包名,比如compile ‘com.yanzhenjie:andserver:1.0.1‘中的com.yanzhenjie就是這裡配置的。group = "com.yanzhenjie"install {    repositories.mavenInstaller {        // 產生pom.xml和參數        pom {            project {                packaging ‘aar‘                // 項目描述,複製我的話,這裡需要修改。                name ‘AndServer For Android‘// 可選,項目名稱。                description ‘The Android build the framework of the Http server.‘// 可選,項目描述。                url siteUrl // 項目首頁,這裡是引用上面定義好。                // 軟體開源協議,現在一般都是Apache License2.0吧,複製我的,這裡不需要修改。               licenses {                    license {                        name ‘The Apache Software License, Version 2.0‘                        url ‘http://www.apache.org/licenses/LICENSE-2.0.txt‘                    }                }                //填寫開發人員基本資料,複製我的,這裡需要修改。                developers {                    developer {                        id ‘yanzhenjie‘ // 開發人員的id。                        name ‘yanzhenjie‘ // 開發人員名字。                        email ‘[email protected]‘ // 開發人員郵箱。                    }                }                // SCM,複製我的,這裡不需要修改。                scm {                    connection gitUrl // Git倉庫地址。                    developerConnection gitUrl // Git倉庫地址。                    url siteUrl // 項目首頁。                }            }        }    }}// 產生jar包的task,不需要修改。task sourcesJar(type: Jar) {    from android.sourceSets.main.java.srcDirs    classifier = ‘sources‘}// 產生jarDoc的task,不需要修改。task javadoc(type: Javadoc) {    source = android.sourceSets.main.java.srcDirs    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))    // destinationDir = file("../javadoc/")    failOnError false // 忽略注釋語法錯誤,如果用jdk1.8你的注釋寫的不規範就編譯不過。}// 產生javaDoc的jar,不需要修改。task javadocJar(type: Jar, dependsOn: javadoc) {    classifier = ‘javadoc‘    from javadoc.destinationDir}artifacts {    archives javadocJar    archives sourcesJar}// 這裡是讀取Bintray相關的資訊,我們上傳項目到github上的時候會把gradle檔案傳上去,所以不要把帳號密碼的資訊直接寫在這裡,寫在local.properties中,這裡動態讀取。Properties properties = new Properties()properties.load(project.rootProject.file(‘local.properties‘).newDataInputStream())bintray {    user = properties.getProperty("bintray.user") // Bintray的使用者名稱。    key = properties.getProperty("bintray.apikey") // Bintray剛才儲存的ApiKey。    configurations = [‘archives‘]    pkg {        repo = "maven"  // 上傳到maven庫。        name = "andserver"  // 發布到Bintray上的項目名字,這裡的名字不是compile ‘com.yanzhenjie:andserver:1.0.1‘中的andserver。        websiteUrl = siteUrl        vcsUrl = gitUrl        licenses = ["Apache-2.0"]        publish = true // 是否是公開項目。    }}

  上面有兩個特別的地方要注意:

  1. 我們上傳的開源項目一般會託管到github上,我們上傳的時候會把項目和module的gradle檔案傳上去,所以不要把帳號密碼的資訊直接寫在gradle檔案中,而我們的local.properties檔案一般不會上傳(沒經驗的人可能會傳),所以我們把使用者隱私資訊配置到local.properties, 在gradle中動態讀取,如何讀取,在上面最後一個代碼塊中有介紹。
  2. 我們看到在module/library的gradle中pkg下的name="andserver",這個名字是我們項目在Bintray中的名字,所以這個andserver不是compile ‘com.yanzhenjie:andserver:1.0.1’的andserver,那麼compile中的andserver哪裡配置呢?compile的library名稱就是library/module的名稱,如所示:

(三)在local.properties中為module/libraray配置使用者隱私資訊

  我們會在local.properties中配置很多變數,別的地方動態引用或者讀取,這樣就可以做到修改一個地方,其它地方都可以不用改了:

sdk.dir=你的sdk路徑# 其實你只需要添加下面兩行,第一個填你的使用者名稱,比如我的是yolanda。bintray.user=yolandabintray.apikey=fa************************5a

  注意下我這裡為了不泄漏我的ApiKey,就用*代替了,你的要寫你的完整的ApiKey喔。

上傳項目到Jcenter

  準備工作都做完啦,最後一步就是上傳操作了,點擊AndroidStudio底部的Terminal,觀察下Terminal顯示的路徑是否是你當前項目的root。

  1. 這裡如果你系統配置了gradle的使用者環境,輸入gradle install,如果沒有配置gradle使用者環境,輸入gradlew install,如果沒有問題,最終你會看到BUILD SUCCESSFUL
  2. 如果你看到了產生javadoc時編譯不過,那麼要看下在gradle中task javadoc下有沒有failOnError false這句話,在剛才編寫gradle時提示過了。如果加了這句而你的javadoc寫的不規範會有警告,你不用鳥它。
  3. 最後一步,運行gradle install後看到BUILD SUCCESSFUL後,再輸入上傳命令gradle bintrayUpload,等一分鐘左右就執行完了,會提示SUCCESSFUL
  4. 瀏覽器https://bintray.com/後會看到你的項目。

  上傳完成咯,但是別著急喔,你會發現在項目gradle中依賴如下代碼後依賴失敗:

‘compile ‘包名:模組名:1.0.0‘

  原因是我們項目上傳完成後還需要Bintray的管理員審核,所以在剛才項目頁面點擊進去查看詳情,點擊Add to Jcetner

  之後的頁面中填寫項目資訊,交給Bintray管理員審核:

  審核蠻快的,我都是晚上提交,第二天早上在公交車上就收到審核通過的郵件了,審核通過就可以用gradle compile依賴咯,祝你好運喔。

著作權聲明:轉載請註明本文轉自嚴振傑的部落格: http://blog.csdn.net/yanzhenjie1003

AndroidStuio快速發布開源項目到Jcenter/Bintray

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.