android项目两种构建方式的整合(Eclipse/idea和Android Studio)
android的兩種構建方式
目前android主要有兩種構建方式,一種基于ant(傳統的),另一種是13年Google/IO上新推出基于Gralde的構建(Android Studio)。從sdk的samples的例程也可以看到api18后的例程的項目目錄結構也變了。
簡單的看一下兩種構建方式的目錄結構,我們以當前最新sdk19為例
傳統的ant構建(Eclipse和Idea默認的Android結構)
$ANDROID_HOME/samples/android-19/legacy/ActionBarCompat
res/ src/ AndroidManifest.xml
這是最簡單的結構,可能還會有assets,libs等目錄,也就是我們在ide新建一個android項目的骨架結構啦Orz
基于Gradle的Android Studio構建目錄
$ANDROID_HOME/samples/android-19/ui/DoneBar
DoneBarSample/src/main/java/res/AndroidManifest.xmltests/src/AndroidManifest.xmlbuild.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...)
很討厭是不是?還好啦,不過配多了你就覺得蛋疼了。所以,就是為什么Gradle比較有優勢的地方了。對于以上的問題,我們只需要在項目中的build.gradle聲明
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文件
不做過多介紹,直接上代碼,看著改改就可以啦,還有更多的需求的話可以參考這里:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | /* ?*?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 } |
總結
以上是生活随笔為你收集整理的android项目两种构建方式的整合(Eclipse/idea和Android Studio)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于构件的软件开发
- 下一篇: 软件的复用技术及开发方法