目前android主要有两种构建方式,一种基于ant(传统的),另外一种是13年Google/IO上新推出基于Gralde的构建(Android Studio)。从sdk的samples的例程也能够看到api18后的例程的项目目录结构也变了。
linux
简单的看一下两种构建方式的目录结构,咱们以当前最新sdk19为例android
传统的ant构建(Eclipse和Idea默认的Android结构)git
$ANDROID_HOME/samples/android-19/legacy/ActionBarCompat
github
res/ src/ AndroidManifest.xml
这是最简单的结构,可能还会有assets,libs等目录,也就是咱们在ide新建一个android项目的骨架结构啦Orzwindows
基于Gradle的Android Studio构建目录api
$ANDROID_HOME/samples/android-19/ui/DoneBar
android-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还提供了不少构建的特性,好比直接把第三方库做为一个子项目依赖进来,具体参阅其文档
很明显,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