- 打包
- 执行./gradlew assemble gradle (可以简写成./gradlew a)会分别编译出debug和release版本的apķ
- 执行./gradlew assemble release (可以简写成./gradlew aR)会编译出release版本的apk
- 执行./gradlew assemble debug (可以简写成./gradlew dR)会编译出debug版本的apk
- 签名 首先要生成一个签名文件使用build->generate signed apk生成一个签名文件然后再gradle中进行如下配置
- 多渠道打包 现在android域中加上图一的配置,再在manifest文件中的appliation节点下配置图二的节点,最后在图三配置flavorDimensions参数(不配置会报错),然后进行执行./gradlew build就会生成各渠道的debug、release包了也可以使用下图对productFlavors域进行遍历或者flavor的name
- Check 任务 ./gradlew check 运行Link等等
- Build 任务 ./gradlew build 等价于assemble任务和check任务
- Clean 任务 ./gradlew clean 清除build过程中的所有中间数据
- 通过配置build.gradle中android域可以把资源文件分成好几个文件夹
- 可以在项目层的build.gradle中的ext域配置一些项目中通用的参数类似java中的全局静态变量然后module层的build.gradle中通过rootProject.ext进行引用
也可以写在一个xxx.gradle文件里面然后在build.gradle中执行apply from: ‘xxx.gradle’进行引用 - build.gradle中可以对某些配置项进行动态赋值,例如versionCode
- 自定义buildType,下图中执行./gradlew aHfw 可以只打一个hfw的apk,若执行./gradlew build则会打出debug、release、hfw三个包
- 自定义buildType还可以选择继承一个已有的buildType
- buildType内可以使用的子属性,如下图所示
- lintOptions(android域下面) 可以配置在编译时lint报错后不中断编译
- compileOptions 编译选项用来配置java版本暂时想不到运用场景,书上说是为了使用指定版本的特性
- 代码混淆Proguard minifyEnabled表示是否开启代码混淆 proguardFiles 用来指定混淆文件,下图中使用的是默认的混淆文件
- 配置文件gradle.properties 可以配置一些参数在build.gradle中引用,用以下方式配置的参数可以在命令行中进行赋值
- 下图中的配置(直接取值)无法在命令行中进行赋值
- gradle 系统参数(直接可以使用)
- project module标识
- project.name module名
- project.buildDir module构建目录
- project.buildFile module的build.gradle路径
- project.version module版本信息
- name task的名字
- buildDir 同project.buildDir
- path task的全限定路径名
- 对每个buildType执行不同的逻辑,现在下图中创建buildConfigField字段,然后系统会在build目录下个各个buildType下面生成一个buildConfig类,其中就包含build.gradle中声明的buildConfigField字段,在代码中就可以获取到该值从而执行不同的逻辑
- 为各种buildType指定不同的app_name 只需要在各个buildType下加入resValue(该参数可以直接把资源加到R文件中,也可写在defaultConfig中,一般可用于获取动态字符串比如构建开始时间),并且删除value/string.xml里面的app_name,如果不删除会报错说重复定义了app_name
- 当需要为项目添加jar包,先放入libs目录下然后可以选择右键add as library也可以直接sync project,如果build.gradle中存在implementation fileTree(dir: ‘libs’, include: [‘*.jar’])则直接加入后就可以使用
- 为build出来的包进行重命名 默认情况下apk的文件名为app-渠道名-buildType.apk 下图中的代码可以修改release版本的apk的文件名
- 使用Gradle打jar包
- Gradle依赖库缓存通知
- Gradle依赖传递 当主项目依赖A项目时若写成compile ‘com.xxx.xxx.1.0.0-SNAPSHOT’,则表示主项目依赖A项目及A项目的依赖 若写成compile ‘com.xxx.xxx.1.0.0-SNAPSHOT@aar’,则表示只引用A项而不引用其依赖,当不需要一个A依赖中的某几个库时可以通过
compile (com.xxx.xxx.1.0.0-SNAPSHOT){
exclude module 'com.xx.xx:1.1'
}
- gradle 性能检测通过执行以下代码会生成html文件
./gradlew build -profile
* 从上一点可以发现Lint这个task所花的时间很长通过在命令行中加上参数-x lint或者在项目的build.gradle中加上如下代码即可不执行lint这个task
project.gradle.startParameter.excludedTaskNames.add('lint')
- 在debug版本中可以加上aaptOptions域代码加快aapt速度从而加快编译速度,release版本不要使用
- 加快gradle编译速度,通过下图中开启增量编译(已废弃)、提高内存、开启守护进程、并行编译、启用新的孵化模式
- 在gradle脚本中执行终端命令并或者返回的文本通过’xxxxx’.execute([],project.rootDir).text