Android Gradle相关知识

  • 打包
    1. 执行./gradlew assemble gradle (可以简写成./gradlew a)会分别编译出debug和release版本的apķ
    2. 执行./gradlew assemble release (可以简写成./gradlew aR)会编译出release版本的apk
    3. 执行./gradlew assemble debug (可以简写成./gradlew dR)会编译出debug版本的apk
    4. 签名 首先要生成一个签名文件使用build->generate signed apk生成一个签名文件然后再gradle中进行如下配置这里写图片描述
    5. 多渠道打包 现在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 系统参数(直接可以使用)
    1. project module标识
    2. project.name module名
    3. project.buildDir module构建目录
    4. project.buildFile module的build.gradle路径
    5. project.version module版本信息
    6. name task的名字
    7. buildDir 同project.buildDir
    8. 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.propertiesandroid域下面
  • 在gradle脚本中执行终端命令并或者返回的文本通过’xxxxx’.execute([],project.rootDir).text这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_22194581/article/details/80049949
今日推荐