介绍
Gradle是一个高级构建系统和构建工具,允许通过插件自定义构建逻辑
基本概念
projects , tasks and action
- projects:一个标准的AS项目而言,一个build.gradle对应一个project
- tasks:一系列task的集合构成一个project
- action:相当于build.gradle中的一段段代码块
gradle相关文件解析
- local.properties sdk 配置,还可以配置 ndk 路径
ndk.dir=D\:\\androidstudio\\SDK\\ndk-bundle
sdk.dir=D\:\\androidstudio\\SDK
2.settings.gradle
在你的项目中如果有多个 Module 存在的时候,就可以选择包含哪些进行编译。
include ':app', ':camera', ':sticker', ':FFmpegAndroid'
3.根目录build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext{
}
Repositories 配置的是上面所说的依赖管理的东西,也就是依赖管理的服务器。默认是 jcenter() 你可以添加其他,多个之间不干扰.
allprojects 该配置会被应用到所有的子工程
task clean 运行gradle clean时,执行此处定义的task。
4.App目录下build.gradle
//com.android.application 表示这是一个应用程序模块,可直接运行
//com.android.library 标识这是一个库模块,是依附别的应用程序运行
apply plugin: 'com.android.application'
android {
//关闭Android Studio的PNG合法性检查
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
//应用程序的包名
applicationId "com.hx.stevenbase"
//最小sdk版本,如果设备小于这个版本或者大于maxSdkVersion将无法安装这个应用
minSdkVersion 19
//目标sdk版本
targetSdkVersion 26
//版本号
versionCode 1
//版本名,显示给用户看到的版本号
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
archivesBaseName = "weshare-$versionName" //指定打包成Jar文件时候的文件名称
ndk {
//设置库(so)文件名称
moduleName "hebbewifisafe"
//引入库,比如要用到的__android_log_print
ldLibs "log", "z", "m", "jnigraphics", "android"
//, "x86" 显示指定支持的ABIs
abiFilters "armeabi", "x86", "armeabi-v7a"
// C++11
cFlags "-std=c++11 -fexceptions"
stl "gnustl_static"
}
// 设置MultiDex可用
multiDexEnabled true
}
signingConfigs {
steven {
storeFile file("../StevenBase.jks")
storePassword "1234567890"
keyAlias "stevenbase"
keyPassword "1234567890"
}
}
buildTypes {
release {
//是否支持zip
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
//是否对代码进行混淆,true表示混淆
minifyEnabled false
//是否支持调试
debuggable false
//关闭jni调试
jniDebuggable false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.steven
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.steven
}
}
//打包配置
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/MANIFEST.MF'
//只有第一个匹配的文件会被选中
pickFirsts = []
//当有两个文件,后一个文件会新起一行,把内容插入到前一个文件的内容,直到结束
merges = []
//排除一些文件
excludes = []
}
//在这里你可以设置你的产品发布的一些东西,
//比如你现在一共软件需要发布到不同渠道,
//且不同渠道中的包名不同,那么可以在此进行配置;
//甚至可以设置不同的 AndroidManifest.xml 文件。
productFlavors {
hebbe {
}
googlePlay {
}
solo {
}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
sourceSets {
main {
res.srcDirs = ['src/main/res']//指定资源文件目录
manifest.srcFile 'AndroidManifest.xml'//指定清单文件
}
}
//multiDex的一些相关配置,这样配置可以让你的编译速度更快
dexOptions {
//让它不要对Lib做preDexing
preDexLibraries = false
//开启incremental dexing,优化编译效率,这个功能android studio默认是关闭的。
incremental true
//增加java堆内存大小
javaMaxHeapSize "4g"
}
//检查lint设置
lintOptions {
//即使报错也不会停止打包
abortOnError false
//elease版本的时候是否进行检测
checkReleaseBuilds false
}
//在这里进行 Java 的版本配置,对应版本的一些新特性,
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
//指定当前项目的所有依赖关系:本地依赖、库依赖、远程依赖
//本地依赖:可以对本地Jar包或目录添加依赖关系
//库依赖:可以对项目中的库模块添加依赖关系
//远程依赖:可以对jcenter库上的开源项目添加依赖
//标准的远程依赖格式是 域名:组织名:版本号
dependencies {
//本地依赖
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testImplementation 'junit:junit:4.12'
//远程依赖,com.android.support是域名部分,appcompat-v7是组名称,26.1.0是版本号
implementation 'com.android.support:appcompat-v7:26.1.0'
//库依赖
implementation project(':Base')
}