android項目兩種構建方式的整合(Eclipse/idea和Android Studio)

github文章備份,得到更好的閱讀體驗java

android的兩種構建方式

目前android主要有兩種構建方式,一種基於ant(傳統的),另外一種是13年Google/IO上新推出基於Gralde的構建(Android Studio)。從sdk的samples的例程也能夠看到api18後的例程的項目目錄結構也變了。
linux

簡單的看一下兩種構建方式的目錄結構,咱們以當前最新sdk19爲例android

  1. 傳統的ant構建(Eclipse和Idea默認的Android結構)git

$ANDROID_HOME/samples/android-19/legacy/ActionBarCompatgithub

res/
src/
AndroidManifest.xml

這是最簡單的結構,可能還會有assets,libs等目錄,也就是咱們在ide新建一個android項目的骨架結構啦Orzwindows

  1. 基於Gradle的Android Studio構建目錄api

$ANDROID_HOME/samples/android-19/ui/DoneBarandroid-studio

DoneBarSample/
    src/
        main/
            java/
            res/
            AndroidManifest.xml
    tests/
        src/
            AndroidManifest.xml
    build.gradle        # DoneBarSample子項目的gradle構建腳本
gradle/                 # gradle臨時文件夾,不用管
build.gradle            # 根項目(DoneBar)的gradle構建腳本
gradlew                 # gradle-wrapper在windows平臺運行腳本(有了這個在本地能夠無需安裝Gralde)
gradlew.bat             # gradle-wrapper在linux,mac平臺下的運行腳本(效果同上)
settings.gradle         # gradle多項目的項目申明文件
README.txt

看起來,Gradle好像更搞得更復雜了,可是,gradle的優點在於多項目的構建。實際上,1方案只是一個咱們項目核心的源代碼而已,沒有任何的依賴。一般狀況下,當咱們寫android應用時,會依賴第三方庫,若是是個jar還好辦,可是很多狀況下同時須要引入第三方的資源文件(好比說actionbar-compat,actionbar-sherlock等),這樣就至關於把第三方庫做爲一個項目給引入到咱們這個獨立的項目中來了(而且這裏面的項目之間的依賴還得本身去調控,好比說我們的項目依賴於support-v4, 那好,咱們把v4引入而後在項目中申明依賴關係,接下來我們的項目依賴support-v7-appcompat,導入這個庫,尼瑪,這個庫不只有jar,還有資源文件,那好把這兩個引入並聲明好依賴關係,這時,你會發現項目依舊報錯,由於v7那個jar依賴於v4那個jar...)app

很討厭是否是?還好啦,不過配多了你就以爲蛋疼了。因此,就是爲何Gradle比較有優點的地方了。對於以上的問題,咱們只須要在項目中的build.gradle聲明eclipse

dependencies {
    compile "com.android.support:support-v4:$supportLibVersion"
    compile "com.android.support:support-v13:$supportLibVersion"
    // compile project(':your project')
    // compile ('libs/*.jar') // all your jar in the libs dir
}

這只是最簡單的應用,gradle還提供了不少構建的特性,好比直接把第三方庫做爲一個子項目依賴進來,具體參閱其文檔

咱們是否應該從ant構建遷移到Androd Studio的Gralde構建?

很明顯,Android Studio是google力推的開發工具,是趨勢,並且,老實說Eclipse在開發android應用方面不如Android-Studio(idea)好使。可是,Android Studio目前尚未到正式版,還在開發階段,出個bug你也傷不起Orz

另外,Gradle的構建目前仍是很慢,相對與ant的構建,慢了好多,改了一處地方,run,要等很多時間,而我在idea或者eclipse上很快就構建好了

綜上,沒有解決以上兩個問題仍是不太推薦android-studio的,不過,卻是挺建議使用eclipse開發android的朋友有使用Intellij IDEA的開源社區版去開發android,事實上,Android Studio就是架在IDEA上的嘛

一種過渡的方式,同時支持兩種構建方式

對於現有的項目或者新的項目,之後怎麼轉移到Android Studio呢,或者說,我就是想試試我這個項目在Android Studio上開發爽不爽?出於Gradle的靈活性,咱們徹底能夠作出一個同時支持兩種構建方式的項目。

項目的結構和傳統的同樣,這樣即可以做爲android項目直接導入到eclipse或者idea中,核心在於gradle的build.gradle文件

不作過多介紹,直接上代碼,看着改改就能夠啦,還有更多的需求的話能夠參考這裏

/*
 * The MIT License (MIT)
 * Copyright (c) 2014 longkai
 * The software shall be used for good, not evil.
 */
buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath 'com.android.tools.build:gradle:0.6.+'
	}
}

// for our non-android-support libs, such as gson, etc.
repositories {
	// prefer and fall back
	jcenter()
	mavenCentral()
}

apply plugin: 'android'

ext {
	supportLibVersion = '19.0.1'
}

android {
	compileSdkVersion 19
	buildToolsVersion = '19.0.1'

	sourceSets {
		defaultConfig {
			testPackageName 'tingting.chen.tests'
		}

		main {
			assets.srcDirs = ['assets']
			res.srcDirs = ['res']
			aidl.srcDirs = ['src']
			resources.srcDirs = ['src']
			renderscript.srcDirs = ['src']
			java.srcDirs = ['src']
			manifest.srcFile 'AndroidManifest.xml'
		}

		instrumentTest {
			assets.srcDirs = ["tests/assets"]
			res.srcDirs = ["tests/res"]
			resources.srcDirs = ["tests/src"]
			java.srcDirs = ["tests/src"]
		}
	}
}

dependencies {
	// if you use Android Studio with a lib has its own res/ directory,
	// and that lib is not available in remote maven repo,
	// you need to use gradle' s multi-project build facility.
	// if you don' t know how it works, please refer Gradle' s docs or google.
	compile files("libs/*.jar")
	compile "com.android.support:support-v4:$supportLibVersion"
	compile "com.android.support:support-v13:$supportLibVersion"
	// please download google android-volley and compile it to a jar or multi-project build!
}

task wrapper(type: Wrapper) {
	// 1.9+ is not supported for now!
	gradleVersion = 1.8
}

本做品採用知識共享署名-相同方式共享 4.0 國際許可協議進行許可。

2014-02-07

相關文章
相關標籤/搜索