gradle学习记录
Posted 劲火星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle学习记录相关的知识,希望对你有一定的参考价值。
一、概念
什么是gradle
1、独立项目,和Google无关
2、Grdle基于Groovy。(Maven、Ant基于xml)
3、Gradle兼容Maven、Ant
4、Gradle 的推出主要以 Java 应用为主,当然还支持 android、C、C++等。
二、命令
如下是使用gradle中使用的几个命令,如果是本地使用可以使用的到,如果是在AS上就由AS来自动使用
- assemble:对所有的 buildType 生成 apk 包。
- clean:移除所有的编译输出文件,比如apk
- check:执行
lint
检测编译。 - build:同时执行
assemble
和check
命令
三、目录
下面看一下在AS中的目录结构
1、第一个是gradle文件夹,其中包含一个gradle-wrapper.jar和一个gradle-wrapper.properties,其中jar是做低版本兼容用的,properties文件中有该gradle的版本号
2、下面来看一个工程下的build.gradle
buildscript
repositories
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:1.0.0'
allprojects
repositories
jcenter()
内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(), 之前版本则是mavenCentral(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了android gradle plugin的版本,android studio 1.0正式版必须要求支持gradle plugin 1.0的版本。
3、下面来看一个Moudle下的build.gradle
// com.android.application 说明了这是一个项目
// 如果是作为库的module 是 apply plugin: 'com.android.library'
apply plugin: 'com.android.application'
// android 相关 构建参数
android
compileSdkVersion 23 // 编译使用SDK版本
buildToolsVersion "23.0.3" // 编译工具的版本 buildTools
defaultConfig
applicationId "com.am.gradletest" // 用于标识的包名
minSdkVersion 14 // sdk最低支持版本
targetSdkVersion 23 // 目标SDK版本,如果目标设备的API版本正好等于此数值,就不会为此程序开启兼容性检查判断的工作
versionCode 1 //版本号
versionName "1.0"
// 编译类型
// 下面 声明了 debug 和 release 两种类型,名字随意
buildTypes
// release 发布 ,release里面是关于发布的配置
release
minifyEnabled false // minifyEnabled 是否开启混淆,false不开启
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 混淆文件
// debug(不作为发布版)时候的配置,这个debug的代码块默认不带,这里是手动加的
debug
// 依赖 三种依赖,第一种是本地的jar,第二种是本地的module库,第三种是利用gradle远程的依赖管理
dependencies
compile fileTree(dir: 'libs', include: ['*.jar']) // 这句代码会自动依赖本地的所有jar,就不要逐个依赖了
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
文件开头apply plugin是最新gradle版本的写法。buildToolsVersion这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager 去下载对应版本。applicationId代表应用的包名,也是最新的写法,这里就不在多说了。4、local.properties Android studio 自动生成,用于配置本地的 SDK、NDK 路径。
因为这是针对设备的设置,不同的设备SDK路径不一定一样。
5、setting.gradle 这个是用来配置模块的,程序最开始的时候要先执行到这里,看看有哪几个模块,然后分别进行编译 就是在初始化时,读取setting.gradle中的项目配置,来确定编译的工程,通过每个工程中的build.gradle来确定编译的任务,而这些任务是由对应的plugin来决定的,比如 'com.android.application'插件决定编译成apk,而'com.android.library'插件决定项目编译成.aar库文件等。
四、原理
Gradle中,每一个待编译的工程都叫一个Project。每一个Project在构建的时候都包含一系列的Task。比如一个Android APK的编译可能包含:Java源码编译Task、资源编译Task、JNI编译Task、lint检查Task、打包生成APK的Task、签名Task等。一个具体的编译过程是由一个一个的Task来定义和执行的。
Gradle的生命周期
1. Initialization -初始化阶段
2. Configuration -配置阶段
3. Execution -执行阶段
如下是构建过程
1. 编译器将您的源代码转换成 DEX(Dalvik Executable)文件(其中包括运行在Android设备上的字节码),将所有其他内容转换成已编译资源。
2. APK 打包器将 DEX文件和已编译资源合并成单个APK。不过,必须先签署APK,才能将应用安装并部署到Android设备上。
3. APK 打包器使用调试或发布密钥库签署您的APK
尊重作者,尊重原创,参考文章:
http://blog.csdn.net/a_ycmbc/article/details/53924734
https://segmentfault.com/a/1190000002439306
http://www.jianshu.com/p/01281d1c3384
http://www.jianshu.com/p/9df3c3b6067a
以上是关于gradle学习记录的主要内容,如果未能解决你的问题,请参考以下文章