gradle 教程积累

1. 基础教程


实践博客

  • Google's guide on Gradle for Android
  • 美团Android自动化之旅—适配渠道包
  • Android Gradle实战中遇到的问题与经验

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 篇
    检查插件

    增加依赖

    增加外部扩展(1),可以清晰统一的管理子moduled的配置

    以上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目录下,删除缓存后,下次运行就会自动重新下载远程依赖了。

你可能感兴趣的:(gradle 教程积累)