我们知道Android Gradle其实就是一个Gradle的一个第三方插件,它是由Google的Android团队开发的,基于Gradle构建的,和Android Studio完美搭配。相比于旧的构建系统(比如:Eclipse + Ant),它更灵活,更容易配置,还能方便的创建衍生的版本,也就是我们常用的多渠道包。

下面是Android 官方对它的介绍:

(1) 可以很容易地重用代码和资源。

(2) 可以很容易的创建应用的衍生版本,比如:创建多个apk、创建不同功能的应用。

(3)可以很容易地配置、扩展以及自定义构建过程。

(4)能和IDE无缝整合。

一、Android Gradle 插件分类

Android Gradle插件的分类就是根据Android工程的属性分类的。在Android中有3类工程,一类是App工程,它可以生成一个可运行的apk应用。一类是Library库工程,它可以生成AAR包给其他的App工程公用,就和我们的jar包一样,但是它包含了Android的资源等信息,是一个特殊的jar包。最后一类是Test测试工程,用于对App工程或者Library库工程进行单元测试。

App 插件 id :com.android.application

Library 插件 id : com.android.library

Test 插件 id:com.android.test

通过应用以上三种不同的插件,就可以配置我们的工程是一个Android App工程,还是一个Android Library工程,或者是一个Android Test测试工程。然后我们就可以配合着Android Studio,对它们进行编译、测试、发布等操作。

二、应用 Android Gradle 插件

Android Gradle 插件作为Gradle的第三方插件,它托管在Jcenter上,在应用之前,我们要先配置依赖classpath,这样我们在应用插件的时候,Gradle才能找到它们:

buildscript {
repositories {
jcenter() }
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0' // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

我们配置仓库为jcenter,这样当我们配置依赖的时候,Gradle就会去这个仓库寻找我们的依赖。然后我们在dependencies{}配置里声明,我们需要的是Android Gradle 3.4.0版本的插件。

buildscript{} 这部分配置可以写到根工程的build.gradle脚本文件中,这样所有的子工程就不用重复配置了。以上配置好之后,我们就可以应用我们的Android Gradle插件了:

apply plugin: 'com.android.application'

android {
compileSdkVersion
}

android {} 是 Android 插件提供的一个扩展类型,可以让我们自定义Android Gradle工程。

以上的例子是一个App工程插件,应用Android Library插件和Android Test插件也是类似的,只需要换成其相应的id即可。

三、Android Gradle 使用配置

1. compileSdkVersion

compileSdkVersion 是配置编译Android工程的SDK的版本。

2. buildToolsVersion

buildToolsVersion 是 Android 构建工具的版本。此工具可以在Android SDK目录里面找到,它是一个工具包,包括appt、dex等工具。

3. defaultConfig

defaultConfig 是默认配置。它是一个ProductFlavor。ProductFlavor允许我们根据不同的情况同时生成多个不同的APK包,比如多渠道打包。如果不针对我们自定义的ProductFlavor单独配置的话,会为这个ProductFlavor使用默认的defaultConfig的配置。主要包含以下的配置字段:

  • applicationId:配置的包名。
  • minSdkVersion:最低支持的Android API Level。
  • targetSdkVersion:基于的某个指定Android版本开发。
  • versionCode:App 应用内部版本号,一般用于控制APP升级。
  • versionName:App应用的版本名称。

4. buildTypes

buildTypes是一个域对象。我们可以在buildTypes{}里新增任意多个我们需要构建的类型,比如debug,Gradle会帮我们自动创建一个对应的buildTypes,名字就是我们定义的名字。

常见的构建类型:

  • minifyEnabled:是否为该构建类型启用混淆,false 表示不启用,需要启用可以设置为true。
  • proguardFiles:当我们启用混淆时,所使用proguard的配置文件,我们可以通过它配置我们如何进行proguard混淆,比如混淆的级别,哪些类和方法不进行混淆等。它对应BuildType的proguardFiles方法,可以接受一个可变参数。

四、Android Gradle 任务

Android 插件是基于Java的插件,基本上包含了所有Java插件的功能,包括继承的任务,比如assemble、check、build等。除此之外,Android在大类上还添加了connectedCheck、deviceCheck、lint、install、uninstall等任务,这些都是属于Android特有的功能。其中:

  • connectedCheck:在所有连接的设备或者模拟器上运行check检查。
  • deviceCheck:通过API连接远程设备运行checks。
  • lint:在所有的ProductFlavor上运行lint检查。
  • install & uninstall :可以直接在我们已连接的设备上安装或者卸载你的APP。

一般我们常用的任务就是:build、assemble、clean、lint、check。

补充(一):多渠道打包

1. 签名方式 V1 和 V2 的区别

Android 7.0 以前,使用v1签名方式,是jar signature,源自于JDK。

Android 7.0 以后,使用v2签名方式,是Android独有的apk signature。      

使用区别:

  • 只使用v2方式打包,7.0以下版本安装失败。
  • 只使用v1方式打包,7.0和7.0以下的版本都没问题。  

推荐:V1+V2 ,兼容最好且安全性更高。

2. 多渠道打包方式

1). Gradle原生打包方式:在build.gradle中配置productFlavors。

2). 美团网批量打包工具 walle。

Android Gradle 学习笔记(七):Android Gradle 插件的更多相关文章

  1. Android开发学习笔记-关于Android的消息推送以及前后台切换

    下面是最简单的Android的消息推送的实现方法 package com.example.shownotic; import java.util.Random; import android.supp ...

  2. Android 数字签名学习笔记

    Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...

  3. Android:日常学习笔记(2)——分析第一个Android应用程序

    Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...

  4. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  5. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  6. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  7. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  8. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  9. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  10. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

随机推荐

  1. C# 处理URL地址

    calendarset.do?start=1548518400&end=1552147200&_=1546421856958calendarset.do?start=155093760 ...

  2. 使用CSS3实现表格隔行/隔列变色

    <!DOCTYPE html><html><head> <meta charset="utf-8" /> <title> ...

  3. mstsc windows7/10远程桌面身份验证错误 要求的函数不受支持

    之前好好的能远程桌面连接到服务器,但是今天来就不能连接上了,并提示:身份验证错误.要求的函数不受支持. 猜想可能是Windows又更新了什么鬼,后面查询资料知道是由于CredSSP加密Oracle修正 ...

  4. Django - 一对多数据示例

    1.增加Host -id 可以在模版中增加代码: 备注: 1.counter (从1开始) 2.counter0(从0开始) 3.revcounter(倒序) 4.revcounter0(倒序从0开始 ...

  5. 【JavaScript进阶】深入理解JavaScript中ES6的Promise的作用并实现一个自己的Promise

    1.Promise的基本使用 // 需求分析: 封装一个方法用于读取文件路径,返回文件内容 const fs = require('fs'); const path = require('path') ...

  6. 《啊哈算法》中P81解救小哈

    题目描述 首先我们用一个二维数组来存储这个迷宫,刚开始的时候,小哼处于迷宫的入口处(1,1),小哈在(p,q).其实这道题的的本质就在于找从(1,1)到(p,q)的最短路径. 此时摆在小哼面前的路有两 ...

  7. JavaSE 学习笔记之多线程(十三)

    多线程: 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺 ...

  8. nyoj_513_A+B Problem IV_20130131532

    A+B Problem IV 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着 ...

  9. 如何判断windows动态链接库是32还是64位

    如果安装过Visual Studio的话,直接打开一个VS提供的控制台窗口,比如VS2012 x64 Native Tools Command Prompt. 用下面的命令查看程序的头部信息:“dum ...

  10. array_change_key_case()

    定义和用法 array_change_key_case() 函数将指定数组的所有的键进行大小写转换. 如果数组的键(索引)为数字则不发生变化.如果未提供第二个参数,则默认转换为小写. 语法 array ...