这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
gradle构建基本知识
AndroidStudio以gradle为构建工具,我们只需轻点一下run,app就自动打包生成了,这个流程是什么样的?下面先看几个基本名词:
-
buildTypes{}
这个方法参数是一个Closure,gradle默认提供了debug和release两种编译类型,具体的执行(包括编译,打包,clean等)是由一个个task完成,这些task完全由Android Gradle Plugin决定,比如这个GradleDemo的所有Task:可以看出build这个目录下有assembleDebug和assembleRelease两个task(在buildTypes中增加自定义type,这个build下就会生成相应的task)
打开自带的Terminal,用gradle执行task的命令格式为 :gradlew + taskName
gradlew clean:尝试执行其中的clean这个task,可以看出整个build文件夹都被清空了
gradlew assembleDebug :编译一个debug版本,在output生成了debug apk:
在buildType中自定义一个type:
编译dml这个版本:gradlew assembleDml,在output中生成了app-dml-unsigned.apk(这个apk和debug release用的同样的代码,只不过是未签名的本质上和debug apk一样):
- productFlavors
用于多渠道打包,例如新增proA和proB两个product:
productFlavors{
proA{}
proB{}
}
执行编译所有的release包:
看下输出:
也可以利用productName编译特定的产品apk。
- dependencies
技巧:可以通过buildType或者productFlavors来差异化编译依赖库:
debugCompile(name: "$libName", ext: 'aar') //只在debug模式下才会编译
由此可见,我们轻点一下run,背后其实就是执行了gradle脚本:assembleDebug,生成未签名的apk。而编译签名包,也就是执行了有签名文件gradle脚本:assembleRelease而已