歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 如何在Android Studio中使用Gradle發布項目至Jcenter倉庫

如何在Android Studio中使用Gradle發布項目至Jcenter倉庫

日期:2017/3/1 9:32:36   编辑:Linux編程

簡述

目前非常流行將開源庫上傳至Jcenter倉庫中,使用起來非常方便且易於維護,特別是在Android Studio環境中,只需幾步配置就可以輕松實現上傳和發布。

Library的轉換和引用

博主的一個開源項目CustomSwipeListview之前是在Ecplise環境下進行開發且把控件代碼和Demo寫在了一個Project中,所以在發布開源庫前首先是將原項目中的Demo代碼提取出來單獨新建一個項目,並將原項目轉換為一個Library。

  1. 在Android Studio中轉換成Library一般有兩種方法。
    第一種方法是在Android Studio新建一個Project後,在該Project中再新建一個Library Module,方法很簡單,就是在新建Module時選中Android Library即可,詳見下圖藍色區域。



    另一種方法是,在Android Studio中新建一個Project後會默認創建一個app module,我們打開這個app module 的bulid.gradle文件會發現它的默認屬性是application,所以我們需要將文件中的: apply plugin: 'com.android.application' 替換為apply plugin: 'com.android.library',並把defaultConfig中的applicationId 刪除即可。

  2. 在Project轉換Library時需要特別注意的是Library的R.java中的資源ID不是常量。 如果代碼中你在switch-case語句中使用到了相關的資源ID屬性,例如:

    @Override
    public void onClick(View v) {
    	switch (v.getId()) {
    	case R.id.undo_dialog_btn:
    		if (mUndoActionListener != null)
    			mUndoActionListener.executeUndoAction();
    		break;
    	default:
    		break;
    	}
    	dismiss();
    }

    這是Android Studio就會報錯,因為case分支後面跟的參數必須是常數,所以我們暫且只能使用if-else語句來完成相應的邏輯判斷操作,例如:

    @Override
    public void onClick(View v) {
    	if(v.getId()==R.id.undo_dialog_btn){
    		if (mUndoActionListener != null){
    				mUndoActionListener.executeUndoAction();
    			}
    	}
    	dismiss();
    }

添加全局插件

為了能使得項目能自動的打包發布至jcenter倉庫中,我們首先需要在Project的bulid.gradle文件中添加兩個插件依賴,具體如下:

dependencies {
    classpath 'com.android.tools.build:gradle:1.0.1'
    //自動化maven打包插件
    classpath 'com.github.dcendents:android-maven-plugin:1.2'
    //自動上傳至Bintray平台插件
    classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0"
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

Library配置

這裡的Library即是你需要發布的項目Module。

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

version = "1.0.0"

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    resourcePrefix "customswipelistview_"  //這個沒搞清什麼作用,暫時隨意填。

defaultConfig {
    minSdkVersion 16
    targetSdkVersion 21
    versionCode 1
    versionName version
  }
  
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

def siteUrl = "https://github.com/xyczero/custom-swipelistview"
def gitUrl = "https://github.com/xyczero/custom-swipelistview.git"

//填寫唯一包名
group = "com.xyczero"

install {
repositories.mavenInstaller {
    // This generates POM.xml with proper paramters
    pom {
        project {
            packaging 'aar'

            //添加項目描述
            name 'CustomSwipeListview for Android'
            url siteUrl

            //設置開源證書信息
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }
			//添加開發者信息
            developers {
                developer {
                    id 'xyczero'
                    name 'xiayuncheng'
                    email '[email protected]'
                }
            }

            scm {
                connection gitUrl
                developerConnection gitUrl
                url siteUrl
            }
        }
    }
  }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

//配置上傳Bintray相關信息
bintray {
	//讀取Bintray帳號和密碼。
	//一般的為了保密和安全性,在項目的local.properties文件中添加兩行句話即可:
	//bintray.user=username	
	//bintray.apikey=apikey
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")

configurations = ['archives']

pkg {
        repo = "maven"//上傳的中央倉庫名稱
        name = "CustomSwipeListview"//上傳的項目的名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true  //是否發布
    }
}

執行打包並發布

  1. 上述文件配置完成後,先Rebuild一下項目,然後在AS的Terminal運行 gradlew install 命令。
    此時你會發現在項目的.idea文件夾下有一個gradle.xml文件,此文件就是該項目相應的gradle格式配置,同時在所要發布的xxx-module/build/outputs/aar文件夾下有已生成aar文件以及在xxx-module/build/poms文件夾下的pom-default.xml(對應maven格式)。

  2. 在完成上述步驟1後,所有必須的文件已在本地生成完畢,然後接著執行 gradlew bintrayUpload 命令上將項目上傳到Bintray平台上。

  3. 等待上傳結束後,你可以在Bintray上找到你發布的項目,此時你只需要發送一個Request給管理員並耐心等待審批通過即可(博主當時是凌晨發送請求,早上8點多收到的審批通過郵件)。



    至於找到發送請求的途徑有很多,可以進入該傳送門點擊include package輸入你的項目名字並點擊匹配到的項目,也可以直接在首頁搜索你的項目名字並在右下角的Link To點擊加入jcenter的申請。

��束語

如果看完上述教程有什麼不明白之處歡迎留言討論。

使用Gradle部署jar包到Maven中央庫 http://www.linuxidc.com/Linux/2015-01/112389.htm

Gradle創建項目目錄結構 http://www.linuxidc.com/Linux/2012-07/64177.htm

Gradle 打包 Groovy 腳本成 jar與上傳到maven repository http://www.linuxidc.com/Linux/2012-07/64178.htm

Gradle 構建 Android 應用常見問題解決指南 http://www.linuxidc.com/Linux/2013-10/90807.htm

Gradle - 簡單測試驅動Web程序 http://www.linuxidc.com/Linux/2013-11/92611.htm

Gradle - 使用介紹 http://www.linuxidc.com/Linux/2013-11/92611.htm

Gradle 的詳細介紹:請點這裡
Gradle 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved