Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> AndroidStuio快速發布開源項目到Jcenter/Bintray

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

編輯:關於Android編程

前言

最近做了兩個開源項目,一個是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,圖示:

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 // 是否是公開項目。
    }
}

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

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

compile的模塊名稱

(三)在local.properties中為module/libraray配置用戶隱私信息

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

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

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

上傳項目到Jcenter

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

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

Bintray項目展示

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

'compile '包名:模塊名:1.0.0'

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

點擊Add to Jcenter

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

提交審核

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved