title: gradle基础
date: 2018-01-12 14:50:13
categories: android
tags: android基础学习
Gradle 是一个能通过插件形式自定义构建逻辑的优秀构建工具。
以下的一些特性让我们选择了 Gradle:
- 使用领域专用语言(DSL)来描述和控制构建逻辑
- 构建文件基于 Groovy,并允许通过 DSL 来声明元素、使用代码操作 DSL 元素这样的混
合方式来自定义构建逻辑 - 内置了 Maven 和 Ivy 来进行依赖管理
- 相当灵活。允许使用最好的实现,但是不会强制实现的形式
- 插件可以提供它们的 DSL 和 API 来定义构建文件
- 优秀的 API 工具与 IDE 集成
这里主要记录几个比较常用,重要的点。
android Task
-
assemble
组合项目所有输出,他可以细分成assemableDebug
和assembleRelease
。 -
check
执行所有检查,他拥有lint
依赖 -
connectedCheck
在一个连接的设备或者模拟器上执行检查,他们可以在所有连接的设备上并行执行检查,他拥有connectedAndroidTest
依赖 -
deviceCheck
通过APIs连接远程设备来执行检查,主要用于CI(持续集成)服务上。 -
build
执行assemle
和check
的所有工作 -
clean
清空项目的输出。 -
installDebug
安装测试版的apk -
installRelease
安装发布版的apk -
uninstall
卸载安装,他包含三个动作uninstallDebug
卸载测试版本,uninstallRelease
卸载发行版本和uninstallDebugAndroidTest
卸载android测试。
gradle 添加依赖
gradle的依赖主要分成本地包依赖和远程包依赖。
依赖的关键字主要包括:
-
compile
源代码(src/main/java)编译时的依赖 -
runtime
源代码(src/main/java)执行时的依赖 -
testCompile
测试代码(src/main/test)编译时的依赖 -
testRuntime
测试代码(src/main/test)执行时的依赖 -
archives
项目打包时的依赖 -
provided
只编译,并不将jar包导入到apk中。
依赖格式:
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
}
其中的group表示组织,name表示要依赖的库,vesion表示版本。
我们可以简写成
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
当然,不单只有对jar包的依赖,还可以有对文件的依赖,对项目的依赖,他们的写法依次如下:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) //将本地lib目录下所有的jar包进行依赖
compile files('libs/picasso-2.4.0.jar')
compile project(':libraries:lib1') //对项目lib1添加依赖
}
本地依赖
上面讲到的就是本地依赖的方式:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
android {
...
}
外部依赖
首先需要添加远程仓库,android中至少添加一个远程仓库,例如使用开放的maven仓库。
repositories{
mavenCentral()
}
然后,就对添加具体依赖。
dependencies{
compile group: 'commons-collections',name: 'commons-collections', version: '3.2'
}
混淆
启动混淆非常简单,只需要在build.gradle
中启动即可。
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
其中的minfyEnabled
默认是false,即不混淆,因为启动混淆编译速度会比较慢。
与混淆相关的还有一个shrinkResources
属性,可以通过将其设置为true
,设置资源文件压缩。
apk打包流程
- aapt打包res资源文件,生成R文件。
- 处理aidl,生成java文件
- 编译java 生成class文件
- 通过dex命令,将class文件生成dex文件
- apkbuilder阶段,将资源、dex、so合并成apk
- 对apk进行签名
- zipalign阶段,将签名后的apk进行对齐