Android Gradle相关浅析

开发环境:Mac OS(10.10)+Android Studio(1.0)

Android Studio(下称“AS”)目前在安装包中已经集成了Gradle的编译运行时环境,安装完成后会在AS的gradle文件夹下。

在介绍Gradle前,先看一下AS创建工程与导入工程的过程分析:

1、AS create project:

AS在创建new project时会根据$Android_SDK_HOME/tools/lib/templates/projects下的模版创建默认project,依次创建Intellij Project Structure、Launcher Icon以及AndroidMainfest.xml,同时拷贝gradle wrapper(settings.gradle、build.gradle、gradle wrapper文件夹、gradlew)环境,此时android project的结构已经有了,但是还没有包含Gradle运行时环境的定义,下一步就是将$Android_SDK_HOME/tools/lib/templates/gradle中的内容复制到Android Project中,至此一个完整的Android Application+Gradle编译运行时环境就构建完成了。

2、AS import project:

AS在导入时会先检查导入的工程根目录是否含有settings.gradle\build.gradle,如果有,可以确定是一个gradle编译工程,再寻找是否含有gradle文件夹,这个文件夹下默认是gradle wrapper的描述文件(gradle-wrapper.properties\gradle-wrapper.jar),如果文件缺失或者不完整会弹出如下对话框:

Screen Shot 2015-04-18 at 17.25.51

同时第二个选项就说明了此工程下不存在gradle wrapper,第三选项是开发者自己指定本地的gradle运行时环境,但这样不好,因为当多人协作开发时不能保证gradle版本的一致性,所以首选还是使用gradle wrapper方式,在创建完工程提交版本管理时一定要将gradle文件夹添加到版本中,这样可以保证Gradle编译环境的一致,以免造成混乱。

不管是创建新工程还是导入工程,

1)如果选择使用外部Gradle那么这个工程的编译可以脱离AS直接编译打包,只要配置好GRADLE_HOME就OK;

2)如果选择使用gradle wrapper方式这个工程的编译就会交给AS来代理托管,简单说我们无须关注gradle的安装位置、依赖库缓存路径等等,只需要通过AS集成的Gradle插件就可以编译维护工作。后者比较简单尤其是对初学者来说,更加关注代码而不是编译环境的配置,其实AS的代理托管是将gradle下载放置在当前用户文件夹下的.gradle文件夹下,在这个文件夹下wrapper/dist/能够找到在工程wrapper中定义的版本的gradle编译运行时环境,其次这里还缓存了一系列的maven库缓存。

Gradle编译脚本使用Groovy,大部分的封装函数和使用方法可以参考官方文档

另外还有一些不错的文章:

http://tech.meituan.com/mt-apk-adaptation.html

http://zhengxiaopeng.com/2015/02/02/%E4%BD%BF%E7%94%A8Gradle%E5%8F%91%E5%B8%83%E9%A1%B9%E7%9B%AE%E5%88%B0JCenter%E4%BB%93%E5%BA%93/