Android Gradle 文件解析
1.项目project的build.gradle
1.buildscript{①
repositories{
google()
jcenter()
}
dependencies{
classpath 'com.android.tools.build:gradle:3.2.1'
}
}
2.allprojects{②
repositories{
google()
jcenter()
}
}
3.task clean(type:Delete){
delete rootProject.buildDir
}
>解释:
buildscript{}闭包里是gradle脚本执行所需依赖,分别对应的是maven库和插件,包含buildscript和dependencies两个目录
repositories{}闭包:配置远程仓库
dependencies{}闭包:配置构建工具,该闭包使用classpath声明了一个Gradle插件,由于Gradle 并不只是用来构建Android项目,
因此此处引入相关插件来构建Android项目,其中‘3.2.1’为该插件的版本号,可以根据最新的版本号来调整
allprojects{}闭包里是项目本身需要的依赖,比如项目所需的maven库
task clean {}是运行gradle clean时,执行此处定义的task任务,该任务继承子Delete,删除根目录中的build目录
2.Module中的build.gradle
1.apply plugin:'com.android.application/library'
2.android{
compileSdkVersion:28
defaultConfig{
applicationId "com.example.scrolltest"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
signingConfigs {// 自动化打包配置
release {// 线上环境
keyAlias 'test'
keyPassword '123456'
storeFile file('test.keystore')
storePassword '123456'
}
debug {// 开发环境
keyAlias 'test'
keyPassword '123456'
storeFile file('test.keystore')
storePassword '123456'
}
}
buildTypes{
release {// 生产环境
buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前缀
minifyEnabled false//是否对代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件
signingConfig signingConfigs.release//设置签名信息
pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
}
debug {// 测试环境
buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志
buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前缀
minifyEnabled false//是否对代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件
signingConfig signingConfigs.debug//设置签名信息
debuggable false//是否支持断点调试
jniDebuggable false//是否可以调试NDK代码
renderscriptDebuggable false//是否开启渲染脚本就是一些c写的渲染方法
zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
}
}
packagingOptions{
//pickFirsts做用是 当有重复文件时 打包会报错 这样配置会使用第一个匹配的文件打包进入apk
// 表示当apk中有重复的META-INF目录下有重复的LICENSE文件时 只用第一个 这样打包就不会报错
pickFirsts = ['META-INF/LICENSE']
//merges何必 当出现重复文件时 合并重复的文件 然后打包入apk
//这个是有默认值得 merges = [] 这样会把默默认值去掉 所以我们用下面这种方式 在默认值后添加
merge 'META-INF/LICENSE'
//这个是在同时使用butterknife、dagger2做的一个处理。同理,遇到类似的问题,只要根据gradle的提示,做类似处理即可。
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
productFlavors {
wandoujia {}
xiaomi {}
_360 {}
}
productFlavors.all {
//批量修改,类似一个循序遍历
flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name]
}
}
3.dependencies{
implementation fileTree(dir:'libs',include:['*.jar'])
implementation/api 'com.android.support:appcompat-v7:28.1.1'
...
}
>解释:
1.apply plugin:'com.android.application'表明该module是一个可以单独运行的应用程序,打包出来的是.apk文件
而com.android.library,则表示该module需要作为其他module的library而运行,打包出来的是.aar文件
Gradle 与Gradle插件
1.gradle 插件-版本
com.android.tools.build:gradle:3.2.1
作用是:指明当前项目所用的gradle插件的版本,版本号受当前项目的gradle版本以及As版本影响,
而gradle插件又回和Android SDK BuildTool有关联,这也是为什么我们需要在local.propertites中指明sdk的路径,在build.gradle中指明buildToolsVersion的原因
Android Gradle Plugin本质上就是一个AS的插件,它一边调用Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译,打包功能
2.gradle环境变量
指明当前电脑的gradle环境,和jdk一个道理
3.gradle.propertites
指明当前项目所使用的gradle版本
4.applicationID与manifest中package的区别及各自的作用
applicationId对应的是应用包名,package对应的是R文件,也就是java包名
5.Android Studio版本与Gradle插件版本的关系
Android Studio3.0.0后,AS升级时会自动升级gradle插件
6.gradle插件与gradle版本关系
gradle插件是在项目的gradle文件的buildscript{}节点中指明的,每一个版本的gradle插件,都需要有与之对应的gradle版本,这个gradle版本,在gradle.propertites中指明即可
网友评论