Android中Gradle
来源:互联网 发布:淘宝网图书 编辑:程序博客网 时间:2024/05/16 07:46
最近研究下Android的Gradle,查到一些资料,记录下来,方便以后查找。
1、关于Module和Task
任何一个Gradle构建,都是由一个或者多个Module组成。每个Module是一个独立的功能模块,比如构建一个jar包,构建一个web应用等;
每个Module可以包含多个Task,每个Task代表了构建过程中的一个操作,比如编译、打包、发布等。
2、关于build.gradle
build.gradle是Android studio的Moudle构建脚本,每个Moudle都包含一个build.gradle文件,里面定义了一系列的Task。gradle命令会调用当前目录下的build.gradle文件,关于build.gradle的,
apply plugin: 'com.android.library'android { compileSdkVersion 17 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 17 targetSdkVersion 17 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { provided files('libs/android-support-v4.jar')}task clearJar(type: Delete) { delete 'build/outputs/dlplugin.jar'}task makeJar(type: Copy) { from('build/intermediates/bundles/release/') into('build/outputs/') include('classes.jar') rename ('classes.jar', 'dlplugin.jar')}makeJar {}.dependsOn(clearJar,build)
compileSDKVersion:SDK的版本号,也就是API-Level,比如API-17,API-18等;
buildToolsVersion:构建工具版本号,包含了打包工具aapt,dx等,路径位于:(sdk路径)/build-tools/xx.xx.xx;
minSdkVersion:支持的最小SDK版本号
tagetSdkVersion:用于兼容SDK。
minifyEnabled:是否混淆设置
proguardFiles:混淆文件配置
示例中的task的功能:拷贝生成的jar包到指定目录,并且改名称。
在命令行执行gradle makeJar,直接点击运行按钮不行,后面要查下原因。
3、关于Task
3.1 编写第一个编译脚本
3 快速定义任务
执行这个脚本,打印出来的是一样的。也就是我们把像doLast这样的代码,直接简化为<<这个符号了。这其实是Gradle利用了Groovy的操作符重载的特性,把左位移操作符实现为将action加到task的最后,相当于调用doLast方法。看Gradle的api文档里对doLast()和leftShift()这两个方法的介绍,可知它们的作用是一样的,所以在这里,<<左移操作符即doLast的简写方式。
4 代码即脚本
执行结果如下,它将定义的字符串转为大写:
5 任务依赖
我们可以通过以下方式创建依赖:定义一个任务hello,输出“Hello, ”,然后定义一个任务intro,并依赖hello,输出“Gradle!”。结果是打印出“Hello, Gradle!”,如下:
另外,被依赖的task不必放在前面声明,在后面也是可以的,这一点在后面将会用到。
6 动态任务
我们定义了4个task,分别是task0, task1, task2, task3。我们来执行task1,如下:
另外,gradle tasks命令可以查看我们定义的task,从这里我们也可以看到定义的task,如下:
7 任务操纵
7.1 增加依赖
7.2 增加任务行为
8 短标记法
如果你对groovy有一定了解,那你也许会注意到,每个task都是一个构建脚本的属性,所以可以通过“$”这种短标记法来访问任务。如下:执行结果:
注意,通过这种方法访问的任务一定是要已经定义的。
9 增加自定义属性
输出结果:
10. 调用Ant任务
比如利用AntBuilder执行ant.loadfiile。
执行结果:
11 方法抽取
在上面的脚本中,我们可以把部分代码抽取出来,如下:
执行结果一样。
12. 定义默认任务
执行结果:
13 DAG配置
Gradle使用DAG(Directed acyclic graph,有向非循环图)来决定任务执行的顺序。通过这一特性,我们可以实现依赖任务做不同输出。在上面的脚本代码中,whenReady会在release任务执行之前影响它,即使这个任务不是主要的任务(即不是通过命令行传入参数来调用)。
在一个Android项目的build.gradle中,dependencies闭包中有以下四种形式的声明:
compile 'com.android.support:appcompat-v7:22.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
compile files('libs/picasso-2.4.0.jar')
compile project(':androidPullToRefresh')
1 是从repository(默认是jCenter())里下载一个依赖包进行编译并打包3 是从本地的libs目录下寻找picasso-2.4.0.jar这个文件进行编译并打包。类似的命令有`compile fileTree(dir: 'libs', include: '*.jar')`——将libs目录下所有jar文件进行编译并打包。4 是将另一个module(等同eclipse中的library)进行编译并打包
至于provided,是提供给那些只编译不打包场景的命令。就是,我在编译的时候对某一个jar文件有依赖,但是最终打包apk文件时,我不想把这个jar文件放进去,可以用这个命令。目前我知道的就一个插件化的场景需要用到这个命令,如果搞不明白,可以先不管。本文原创,参考自Gradle官方文档,可看作是阅读该文档的笔记。转载请注明本段内容及本文出处:http://blog.csdn.net/maosidiaoxian/article/details/40340571
- Android中Gradle
- android中gradle
- Android的中Gradle
- Android项目中使用Gradle
- Android Studio中Gradle常用命令
- Android Studio 中 Gradle 基础
- 在Android中使用Gradle
- Android中Gradle用法总结
- Android Studio中Gradle介绍
- android中gradle的介绍
- Android Studio 中 Gradle 基础
- Android中gradle和环境变量
- android studio中更新gradle
- Android中Gradle实用指南
- Android studio中gradle配置
- Android gradle 中使用productFlavors
- Android gradle 中使用 buildType
- Android中Gradle使用详情
- [leetcode Q41] First Missing Positive
- BP神经网络训练
- JMeter 入门
- dbms_errlog.create_error_log
- 全国身份证身份数据库sql(2016最新)
- Android中Gradle
- CentOS6.7+caffe2+无GPU版的服务器环境配置
- 【POJ】[1363]Rails
- java复习总结2
- NYOJ248(贪心)
- Nginx配置
- 推送流程
- win7笔记本电脑计算机右键管理打开命令
- 欢迎使用CSDN-markdown编辑器