1. 基础教程
实践博客
Maven
建立企业内部maven服务器并使用Android Studio发布公共项目。
Gradle Tutorial
- Gradle 用法总结
- 构建神器Gradle
- 翻译gradle for android ==>gradle for android pdf
- Writing Custom Plugins gradle官方文档,自定义插件拿到Project类,就可以拿到几乎所有工程配置的属性和方法,然后发挥想象控制你的工程。
官网资料
- Chapter 23. Dependency Management 【待研究】
- Chapter 45. The Java Plugin
- DependencyHandler
- Gradle Plugin User Guide Android Studio 官网提供的Gradle实用教程
- Android Plugin DSL Reference build.gradle android{....} API
2.进阶博文
- Android Gradle编译过程 比较详细的讲述了Gradle 编译 Apk的过程。
-
Weapons for Boilerplate Destruction 之Gradle 篇
以上project.extensions.create....,可以使用${project.myextension.aNumber}访问到对应的属性
3.进阶源码阅读
- hugo JakeWharton 不必介绍了。项目中使用Gradle plugin 和自定义Task 顺便学习一些Process Annotation.
开源插件
-
gradle-android-junit-jacoco-plugin
可以生成代码单元测试覆盖率报告的 Gradle 插件。 -
gradle-android-javadoc-plugin
可以生成 java doc 的 Gradle 插件。 -
gradle-android-apk-size-plugin
可以将 Apk 大小记录到 CSV 文件的 Gradle 插件。 - android-fat-aar Gradle script that allows you to merge and embed dependencies in generted aar file.
- ProperDroid simplifies the way that config different variant on your project.
- dexcount-gradle-plugin A Gradle plugin to report the number of method references in your APK on every build.
使用案例
- 本地引入.aar文件
dependencies {
compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
}
repositories{
flatDir{
dirs 'libs'
}
}
- gradleBuildTime.gradle 获取build脚本每个任务(Task)执行的时间。
- gradle.properties 自定义 buildConfigField 外部变量
- 修改output/apk/[自定义].apk
- 每次构建工程把git版本控制的信息加入VersionName中
def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
def gitTag = 'git tag'.execute([], project.rootDir).text.trim().split("\n").last()
def gitCommits = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim())
-
动态修改Manifest中的参数
android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig {
applicationId "com.liulishuo.engzo"
minSdkVersion 15
targetSdkVersion 23
manifestPlaceholders = [
// 这里需要换成:tencent+你的AppId
"tencentAuthId": "tencent123456",
]
}
}
- 使用全局变量进行依赖版本及一些常用配置的统一管理
- 配置 Apk split 使Android Studio每个对应的Cpu 架构都生成单独的apk,减小整个应用的大小。
- rootdirOfProject/gradle.properties 配置变量如:
VERSION_NAME=1.2.2-SNAPSHOT
然后可以在配置文件所在项目中的所有*.gradle 文件直接引用。 有点类似Java public static的感觉。 - Java 指定JDK版本
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
// targetCompatibility JavaVersion.VERSION_1_8
// sourceCompatibility JavaVersion.VERSION_1_8
}
}
- 签名信息(release.keystore)的存放方式 stackoverflow
- Android — How to add Gradle dependencies using ‘foreach’ 很多开源项目都把依赖统一管理, 这个博文是做得做系统和简洁
问题解决
-
依赖更新
项目依赖的远程包如果有更新,会有提醒或者自动更新吗? 不会的,需要你手动设置changing标记为true,这样gradle会每24小时检查更新,通过更改resolutionStrategy可以修改检查周期。
configurations.all {
// check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
dependencies {
compile group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
之前上传aar同一版本到maven仓库,但依赖却没有更新,该怎么办呢?可以直接删除本地缓存,缓存在~/.gradle/caches目录下,删除缓存后,下次运行就会自动重新下载远程依赖了。