如大家所见,这是一本英文书,由于国内gradle翻译资料不全,特开专栏翻译gradleforandroid书。同时加上自己在实际工作中的心得和实战,希望大家喜欢。如果你是Android开发的新手,或者是从eclipse转到Androidstudio的新手,那么我强烈建议你按照我的文章,如封面所示,使用gradle构建工具自动构建你的Android项目。事不宜迟,让我们开始吧。今天主要介绍Androidstudio工具的使用,以及cradle基础入门,cradlewrapper的使用以及如何从eclipse迁移到Androidstudio。本文记录于2015.12.30,Androidstudio正式版已经开发到1.5,预览版已经到2.0,所以去Androidstudio。当您第一次打开AndroidStudio时,会有一个视图显示您将要创建的环境,并确保您使用的是最新的AndroidSDK和必要的谷歌依赖项。同时会让你选择是否创建AVD,这样你也可以使用Simulator。这里多说几句:尝试使用Androidstudio2.0,因为它确实更快,而且它的模拟器的速度也提高了很多。到目前为止我已经使用它并且没有发现任何错误,因此无需担心。如果使用模拟器开发Android,尽量使用Genymotion模拟器。虽然它目前的Android6.0还有很多BUG,但是在它以下的版本中速度还是非常快的。使用模拟器开发浏览虚拟机安装文件夹工具是一款及时查看SQLite表文件的利器。具体操作方法可以google。尝试使用23.0.0以上的最新构建版本。了解基本的Gradle如果你想基于gradle创建一个Android项目,那么你就得写一个构建脚本,这个文件通常叫做build.grade,你可能已经注意到,当我们看这个脚本的时候,gradle会为我们提供很多默认的配置和常用的默认值,极大的简化了我们的工作,比如ant和maven,在使用的时候需要写很多的配置文件,很恶心。而gradle有默认配置,如果需要使用自己的配置,只需重写即可。Gradle脚本不像传统的xml文件,而是一种基于Groovy的动态DSL,而Groovy语言是一种基于jvm的动态语言。你完全不用担心,当你使用gradle的时候,你还需要学习Groovy语言,这门语言很容易阅读,如果你学过Java,学习Groovy并不难,如果你想开始创建您自己的任务和插件,那么您最好对Groovy有深入的了解。但是,因为它是基于jvm的,所以你可以通过纯java代码或者其他任何基于jvm的语言来开发自己的插件。关于插件开发,我们后面会有相关介绍。Project和tasks在年级中的两个重要概念是project和tasks。每次构建都至少由一个项目完成,所以Androidstudio中的项目和Gradle中的项目不是一个概念。每个项目至少有一项任务。每个build.grade文件代表一个项目。任务在build.gradle中定义。当启动构建过程时,gradle将根据构建文件收集所有项目和任务。一个任务包含一系列动作,然后它们会按顺序执行。动作是要执行的一段代码,很像Java中的方法。任务一旦执行,就不会再执行。不包含依赖关系的任务总是首先执行。一次构建会经历以下三个阶段:初始化阶段:在这里创建项目实例。如果module较多,即有多个build.gradle文件,则会创建多个工程。配置阶段:在这个阶段,将执行build.gradle脚本来创建和配置每个项目的所有任务。执行阶段:在这个阶段,gradle会决定执行哪些任务,执行哪些任务完全取决于开始构建时传入的参数和当前文件夹位置。build.gradle的配置文件一个基于grade构建的项目通常至少有一个build.gradle,那么我们看一下Android的build.gradle:buildscript{repositories{jcenter()}dependencies{classpath'com.android.tools.build:gradle:1.2.3'}}这是实际构建开始的地方。在仓库地址,我们使用JCenter。JCenter类似于maven库,不需要额外配置。Grade还支持其他几个仓库,无论是远程仓库还是本地仓库。构建脚本还定义了一个Android构建工具,这是Android插件的来源。Android插件提供构建和测试应用程序所需的一切。每个Android应用程序都需要这样一个插件:applyplugin:'com.android.application'插件用于扩展gradle脚本的能力,在项目中使用插件,使项目的构建脚本可以定义属性由插件和使用它的任务定义。注意:当你开发依赖库时,那么你应该使用'com.android.library',并且不能同时使用这两个,这样会导致构建失败,一个模块要么使用Android应用程序或Android库插件,而不是两者。当使用Android插件时,Android标签将可用如下:android{compileSdkVersion22buildToolsVersion"22.0.1"}更多属性我们将在第2章讨论。对比eclipse的项目结构,Androidstudio构建的结构大不相同:MyApp├──build.gradle├──settings.gradle└──app├──build.gradle├──build├──libs└──src└──main├──java│└──com.package.myapp└──res├──drawable├──layout└──etc.grade项目通常在根文件夹中包含一个构建。gradle,使用的代码在app文件夹中。这个文件夹也可以用其他名字,没必要定义为app。例如,当你使用Androidstudio创建一个手机应用和一个Androidwear应用的项目时,模块默认会调用application和wearable。Gradle使用了一个概念叫做sourceset,官方解释:一个sourceset就是一系列的资源文件,这些资源文件会被编译执行。对于Android项目,main是一个包含所有资源代码的源集。当您开始编写测试用例时,通常会将代码放在一个名为androidTest的单独源集中,该文件夹仅包含测试。开始使用GradleWrappergrade只是一个构建工具,新版本总是在变化,所以使用GradleWrapper将是一个很好的选择,可以避免gradle版本更新带来的问题。GradleWrapper为windows提供批处理文件,为其他系统提供shell文件。当你使用这些脚本时,会自动下载当前的gradle版本,并在构建项目时自动使用,所以每个开发者在构建自己的App时只需要使用Wrapper即可。所以开发者不需要为你的电脑安装任何gradle版本,在mac上你只需要运行gradlew,在windows上你只需要运行gradlew.bat。也可以使用命令行./gradlew-v查看当前的gradle版本。下面是wrapper文件夹:myapp/├──gradlew├──gradlew.bat└──gradle/wrapper/├──gradle-wrapper.jar└──gradle-wrapper.properties可以看到一个windows的bat文件系统、mac系统的shell脚本、jar文件、配置文件。配置文件包含以下信息:#SatMay3017:41:49CEST2015distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip你可以改变这个url来改变你的gradle版本。使用基本构建命令使用命令行,导航到您的项目,然后输入:$gradlewtasks此命令将列出可以运行的所有任务,您还可以添加–all参数以查看所有任务。当您开发和构建项目时,您需要通过调试配置运行assemble任务:$gradlewassembleDebug该任务将创建一个调试版本的应用程序,Android插件会将其保存在MyApp/app/build/outputs/apk目录下。除了assemble,还有三个基本命令:checkRunallchecks,即在连接的设备或模拟器上运行所有测试。build是check和assemble的集合。clean清除项目的输出文件。保持原有的eclipse文件结构如何将eclipse工程导入到Androidstudio中,本文不再介绍。android{sourceSets{main{manifest.srcFile'AndroidManifest.xml'java.srcDirs=['src']resources.srcDirs=['src']aidl.srcDirs=['src']renderscript.srcDirs=['src']res.srcDirs=['res']assets.srcDirs=['assets']}androidTest.setRoot('tests')}}grade文件中配置会保存eclipse的目录结构,当然如果你有依赖jar包,你需要告诉gradle它在哪里,假设jar包会在一个名为libs的文件夹中,那么你应该这样配置它:dependencies{compilefileTree(dir:'libs',include:['*.jar'])}这一行的意思是:把libs文件夹下的所有jar文件都当作依赖包。总结通过这篇文章,我们可以了解到gradle的优势以及为什么要使用gradle。我们简要了解了AndroidStudio以及它如何帮助我们生成构建文件。同时,我们学习了GradleWrapper,这使得我们维护和共享项目变得更加容易。我们知道如何在Androidstudio中创建一个新项目,以及如何从eclispe迁移到Androidstudio并维护目录结构。同时学习了最基本的gradletask和命令行命令。在下一篇文章中,我们将自定义我们自己的构建文件。
