gradle学习记录

来源:互联网 发布:经典名著改编电影知乎 编辑:程序博客网 时间:2024/05/29 17:16

一、概念


什么是gradle

1、独立项目,和Google无关
2、Grdle基于Groovy。(Maven、Ant基于xml)
3、Gradle兼容Maven、Ant
4、Gradle 的推出主要以 Java 应用为主,当然还支持 Android、C、C++等。

那么我们平时在AS中使用的Gradle是什么呢,其实那就是一个Gradle插件


二、命令


如下是使用gradle中使用的几个命令,如果是本地使用可以使用的到,如果是在AS上就由AS来自动使用

  • assemble:对所有的 buildType 生成 apk 包。
  • clean:移除所有的编译输出文件,比如apk
  • check:执行lint检测编译。
  • build:同时执行assemblecheck命令

三、目录


下面看一下在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


原创粉丝点击