阅读更多

0顶
1踩

移动开发
Gradle尽管比Android Studio早出现,但直到成了官方IDE之后,Gradle才逐渐流行起来。然而,我们是否将这个强大的自动化构建系统的优势发挥地淋漓尽致了呢?

项目与build的特定全局变量

用gradle可以自动生成BuildConfig类,其中能够生成附加字段。这对配置服务器URL之类的工作十分有用,使用它也能轻松开启或关闭功能。
defaultConfig {
    buildConfigField "String", "TWITTER_TOKEN", '"SDASJHDKAJSK"'
}
buildTypes {
    debug {
      buildConfigField "String", "API_URL", '"http://api.dev.com/"'
      buildConfigField "boolean", "REPORT_CRASHES", "true"
    }
    release {
      buildConfigField "String", "API_URL", '"http://api.prod.com/"'
      buildConfigField "boolean", "REPORT_CRASHES", "false"
    }
}

可以从BuildConfig的final类BuildConfig.TWITTER_TOKEN,BuildConfig.REPORT_CRASHES与BuildConfig.API_URL进行访问,后两个根据所在的build类不同也会有差异。

每个buildtype的名字、版本与app id都不同

这样一来使用者就能同时安装发布版与debug版了(切记,在安卓系统中无法安装同名的不同应用)。用户可以在崩溃报告工具中以不同的版本名筛选问题与崩溃。通过查看应用名很容易找到目前所运行的版本。
android {
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "-debug"
            resValue "string", "app_name", "CoolApp (debug)"
            signingConfig signingConfigs.debug
        }
        release {
            resValue "string", "app_name", "CoolApp"
            signingConfig signingConfigs.release
        }
    }

隐私信息

在Android系统中,所有应用都必须经过证书数字签名才能安装,以便系统能够识别应用的作者。而其中有些属于敏感信息,不应被别人看到。

使用者永远不该将这类信息check in到源代码管理工具中。

有些人主张,每个人都应当有自己的本地配置文件,甚至用全局的~/.gradle/build.gradle,不过如果你要执行持续集成(CI)或部署,特别是没有自己CI服务器的情况下,不应在CVS系统里存放任何类型的纯文本凭证。
signingConfigs {
    release {
        storeFile     "${System.env.COOL_APP_PRIVATE_KEY}"
        keyAlias      "${System.env.COOL_APP_ALIAS}"
        storePassword "${System.env.COOL_APP_STORE_PW}"
        keyPassword   "${System.env.COOL_APP_PW}"
    }
}

因此,可以通过环境变量将敏感信息提供给自己的持续集成服务器,而无需担心将任何“危险”信息check in到公司了。

自动生成版本名称(versionName)与版本号(versionCode)

将你的版本拆分成逻辑组件,分别管理。不用再考虑版本号修改的是否正确,也不用担心版本名更新的是否合适了。
def versionMajor = 1
def versionMinor = 0
def versionPatch = 0
android {
    defaultConfig {
        versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch
        versionName "${versionMajor}.${versionMinor}.${versionPatch}"
    }
}

给BuildConfig增加git hash与build时间
def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
def buildTime = new Date().format("yyyy-MM-dd'T'HH:mm:ss'Z'", TimeZone.getTimeZone("UTC"))
android {
    defaultConfig {
        buildConfigField "String", "GIT_SHA", "\"${gitSha}\""
        buildConfigField "String", "BUILD_TIME", "\"${buildTime}\""
    }
}

现在有两个可用变量:BuildConfig.GIT_SHA和BuildConfig.BUILD_TIME,用来结合日志与提交信息或者build时间再好不过。

扣紧安全带

想要快速完成部署,只需创建dev类型,将minSdkVersion设定为21。注意:这样做的话,就无法获得针对真实minSdk的合适linting了。因此很明显只能用在日常工作中,而不能用在发布时。这样一来,安卓gradle插件可以将应用程序的每个模块构建为不同的dex文件(pre-dex),并生成可以在Android Lollipop及以上系统中测试的APK包,而无需再耗费大量时间进行dex合并进程。
android {
    productFlavors 
        dev {
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the application.
            minSdkVersion 14
        }
    }

直接将单元测试结果输出到console中

使用这个小技巧,我们可以实时看到安卓单元测试的记录结果。
android {
  ...

  testOptions.unitTests.all {
    testLogging {
      events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
      outputs.upToDateWhen { false }
      showStandardStreams = true
    }
  }
}

现在运行测试时,输出结果如下:



Gradle,tell me I’m pretty

全部放在一起的话,顺序如下:
android {
    ...
    buildTypes {
        def BOOLEAN = "boolean"
        def TRUE = "true"
        def FALSE = "false"
        def LOG_HTTP_REQUESTS = "LOG_HTTP_REQUESTS"
        def REPORT_CRASHES = "REPORT_CRASHES"
        def DEBUG_IMAGES = "DEBUG_IMAGES"

        debug {
            ...
            buildConfigField BOOLEAN, LOG_HTTP_REQUESTS, TRUE
            buildConfigField BOOLEAN, REPORT_CRASHES, FALSE
            buildConfigField BOOLEAN, DEBUG_IMAGES, TRUE
        }

        release {
            ...
            buildConfigField BOOLEAN, LOG_HTTP_REQUESTS, FALSE
            buildConfigField BOOLEAN, REPORT_CRASHES, TRUE
            buildConfigField BOOLEAN, DEBUG_IMAGES, FALSE
        }
    }
}

作者:César Ferreira,Android软件工程师
翻译:孙薇
审校:唐小引
文章来源:Gradle tips & tricks to survive the zombie apocalypse
  • 大小: 139.3 KB
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • gradle-4.1-all 最新版 包含使用方法

    使用方法。1、修改,项目目录\gradle\wrapper下的,gradle-wrapper.properties文件,中的distributionUrl为https\://services.gradle.org/distributions/gradle-4.1-all.zip。 2、将该文件复制到一下位置C:\Users\你...

  • Gradle Plugins基本使用方法

    Gradle Plugins 一、plugin 的基本写法 直接在build.gradle 中,声明一个Groovy 类继承 Plugin,并执行该任务 class MyTask implements Plugin<Project>...使用跟build.gradle 中的 androi

  • Gradle 学习 ----Gradle 入门

    Gradle是一款Google推出的基于JVM、通用灵活的项目构建工具,支持Maven,JCenter多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml文件,转而使用简洁的、支持多种语言(例如java、groovy等)的build脚本文件。官网...

  • Gradle 使用技巧(三) - dependencies 的类型与区别

    以上是就是dependencies的类型讲解,对于使用Gradle plugin 3.X.X以上版本的gradle,我们应该转而使用implementation,减少compile的使用,避免依赖冲突的产生。如果我们有开放的lib,那么更加应该使用...

  • IDEA的Gradle安装与使用

    IDEA的Gradle安装与使用 1.在IDEA中下载对应的gradle插件 2.在电脑上下载gradle,版本和插件对应 gradle下载链接:https://gradle.org/install/#manually (提供了两种下载方式,Binary-only是只下载二进制源码,...

  • Gradle使用本地maven仓库

    在repositories下添加mavenLocal()方法 plugins { id 'java' } group 'com.luzelong' version '1.0-SNAPSHOT' /* *制定所用的仓库,mavenCentral()表示使用中央仓库,此刻项目中所需要的jar包都会默认从中央仓库...

  • gradle使用技巧(def定义变量 rootProject.ext 添加全局变量)

    在主app目录下的build.gradle中我们可以这样写: def packageTime() { return new Date().format("yyyy-MM-dd") } def versionMajor = 1 def versionMinor = 1 def versionPatch = 0 android { ...

  • gradle使用技巧之全局变量

    我们常用的gradle设置全局变量的方式如下: ${System.env.xx} rootProject.ext.xx ...我们Android使用gradle工程,也经常使用gradle的各种便捷配置。但是gradle对于Android Studio的支持并没有想...

  • Gradle使用maven仓库

    方式1: 设置环境变量 GRADLE_USER_HOME 指定maven仓库的地址 例如: GRADLE_USER_HOME=D:\maven\repo ... build.gradle配置 ... 这个方法我觉得没什么用,可能是我没用对,设置这之后只是在idea中不用设...

  • gradle SourceSets介绍与使用

    通过修改SourceSets中的属性,可以指定...Gradle通过SourceSets实现了Java项目的目录布局定义。 SourceSets目录结构是固定的Java标准项目目录布局: android { sourceSets { main { manifest.srcFile 'An...

  • gradle--使用Idea打包SpringBoot项目--方法/实例

    gradle是后端开发常用的构建工具,本文用实例介绍如何使用maven打包SpringBoot项目。

  • 简单介绍 Gradle 的安装与配置

    简介:Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。特点:①可...

  • 【Gradle】IDEA Gradle使用Maven仓库的方法

    1.在自己的电脑上找到如:D:\Lucifer\.gradle的gradle缓存文件夹,新建文件init.gradle 2.复制粘贴在init.gradle中,保存即可。 allprojects{ repositories { def REPOSITORY_URL = '...

  • 在IDEA里gradle配置和使用

    在IDEA里gradle配置和使用 在IDEA里gradle配置和使用 前言 Windows环境IDEA配置gradle 配置系统环境变量 下载 配置环境变量 测试 idea配置 gradle仓库设置 构建命令 创建缓存依赖 gradle.build构建脚本 ...

  • idea 中 gradle 使用

    Gradle home指定了gradle文件目录Service directory path指定了gradle工作主目录 gradle仓库设置 建议如下设置 repositories { mavenLocal() maven { url ...

  • 最新版gradle安装使用简介

    gradle的最新版本是6.7,从2009年的第一个版本,到2020年的6.7,已经发展了11年了。gradle是作为android的官方构建工具引入的,除了java,它还能够支持多种语言的构建,所以用途非常广泛。

  • Gradle 使用 Maven 本地仓库。

    Gradle 使用 Maven 本地仓库。

  • gradle的安装配置及使用

    gradle的安装以及详细使用

  • Windows下gradle的安装与配置

    下载gradle 直接百度gradle,然后点击链接进去就可以找到,这里附上下载链接:gradle下载 安装gradle 解压下载下来的zip压缩包,如图(我下载的是gradle-4.8.1-bin.zip) 配置环境变量 右键 “计算机”–”...

  • Android Studio Gradle插件版本与Gradle 版本对应关系

    Android Gradle插件版本与Gradle版本关系;JDK版本与Gradle版本关系;Android Gradle插件和Android Studio版本兼容性;/gradle/wrapper/gradle-wrapper.properties配置文件

Global site tag (gtag.js) - Google Analytics