前言

Gradle 是一种依赖管理工具,基于 groovy 语言。studio 是通过 Gradle 来构建项目的,

注:以下代码非运行状态,只是对常用代码做介绍;注释比较详细,不做过多的内容介绍

一、project 根目录下的 build.gradle

buildscript {
/**
* repositories 声明代码托管仓库 jcenter()、mavenCentral()
* 代码托管仓库 - 托管了很多Android开源项目,配置后方便在项目中引用开源项目
*/
repositories {
jcenter()
}
/**
* 声明一个Gradle插件,Gradle 应用版本
*/
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
}
}
allprojects {
repositories {
// 1、下载速度快;2、最大的Java仓库;3、操作简单;
jcenter()
// 上传不友好,上传函数库不太方便
mavenCentral()
}
}
// 执行清理任务
task clean(type: Delete) {
delete rootProject.buildDir
}

二、module 中 build.gradle

特别注意:

在library中的build.gradle,buildTypes 默认不执行debug模式,所以在debug模式中的相关配置是不起作用的。

debug与release两种构建类型,主要区别是能否在设备上调试、以及签名不一样,其他代码和文件资源都一样。

applicationIdSuffix是buildType的一个属性,用于配置基于默认applicationId的后缀。

// 该模块为应用程序模块,可以直接运行

apply plugin: 'com.android.application'

// 该模块为库模块,只能作为代码库依附于别的应用程序模块来运行。

apply plugin: 'com.android.library'

// android 配置项目构建的各种属性

android {

// 指定项目的SDK编译版本

compileSdkVersion 26

// 指定项目构建工具的版本

buildToolsVersion "26.0.0"

// defaultConfig 配置更多细节

defaultConfig {

// 指定项目的包名 ,从manifest中读取

applicationId "com.example.zpdemo"

// 指定项目最低兼容的版本

minSdkVersion 15

// 指定的值表示在该目标版本上已经做过充分测试,系统会为该应用启动一些对应该目标系统的最新功能特性,

// Android系统平台的行为变更,只有targetSdkVersion的属性值被设置为大于或等于该系统平台的API版本时,才会生效

targetSdkVersion 25

// App 内部版本号,是一个整数值,主要用于版本升级

versionCode 1

// 版本名称

versionName "1.0"

// 配置测试App的包名,默认情况是application + “.test”
textApplicationId "com.zpan.demo.test"
// 配置单元测试时使用的Runner,默认使用的是InstrumentationTestRunner,如果想使用自定义的Rnnuer,修改这个值就行
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// 默认是umeng的渠道
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
//解决方法数量超过65535的问题,即64k问题
multiDexEnabled true
// multiDex 混淆
multiDexKeepProguard file('multiDexKeep.pro')
// JNI 引用
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86"
}
// Java 编译版本为1.8的话,另外在 defaultConfig 里要配置 Jack 编译器
jackOptions {
enabled true
}
}
// java JDK版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// 多渠道信息配置
productFlavors {
xiaomi {}
googleplay {}
wandoujia {}
}
// buildTypes 指定生成安装文件的主要配置
buildTypes {
// debug 指定生成测试版安装文件的配置,可以忽略不写
debug {
// 是否对代码进行混淆
minifyEnabled false
// 是否清理无用资源,依赖于minifyEnabled
shrinkResources true
// 是否启用zipAlign压缩
zipAlignEnabled true
// 配置是否生成一个可供调试的apk
debuggable false
// 和debuggable类似,配置是否生成一个可供调试Jni代码的apk
jniDebuggable true
// 命名后缀
versionNameSuffix "_release"
// 引用签名配置
signingConfig signingConfigs.release
// 混淆多个文件。指定混淆的规则文件 这里指定了proguard-android.txt文件和proguard-rules.pro文件两个文件
// proguard-android.txt 为默认的混淆文件,里面定义了一些通用的混淆规则
// proguard-rules.pro 可以在该文件中定义一些项目特有的混淆规则
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 配置Proguard混淆使用的配置文件,混淆单个文件,可多次配置
proguardFile getDefaultProguardFile('proguard-android.txt')
}
// release 指定生成正式版安装文件的配置
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// lintOptions 移除lint检查的error
lintOptions {
abortOnError false
}
// 通过修改SourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除
sourceSets {
/**
* 展示了一个空的sourceSets,它任然可以很好地工作,因为它对每一项属性都有一个默认值。如果使用默认的值的话,
* 在build.gradle中是没有必要再配置一遍的。为了让自己的工程更加有特色一点,你可以修改他们中的任何一项。
*/
main {
}
}
// 签名配置
signingConfigs {
release {
// 签名证书文件路径
storeFile file("D:/Android/test.jks")
// 签名证书文件密码
storePassword "123456"
// 签名证书类型
storeType “”
// 签名证书密钥别名
keyAlias "Test"
// 签名证书文件密钥别名密码
keyPassword "123456"
}
debug {
}
}
}

/**

* 项目的依赖关系 本地依赖、库依赖和远程依赖

* 1、本地依赖:是对本地的jar包或目录添加依赖关系

* 2、库依赖:对项目中的库模块添加依赖关系

* 3、远程依赖:对jcener库上的开源项目添加依赖关系

*

* 远程依赖包含三部分:GROUP_ID:ARTIFACT_ID:VERSION

* GROUP_ID:标识函数库所属组织,命名方式:greenrobot-精确到组织名;squareup-精确到函数库名;

* ARTIFACT_ID:标识函数库名字;

* VERSION:标识函数库版本;

*/
dependencies {
// 本地依赖
compile files('libs/MeiZu_Fingerprint.jar')
// 库依赖
compile project(':zplibrary')
// 远程依赖
compile 'com.android.support:appcompat-v7:26.+'
}