Gradle系列之Android Gradle插件
原文发于微信公众号 jzman-blog,欢迎关注交流。
通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章:
- Gradle系列之初识Gradle
- Gradle之Groovy基础篇
- Gradle系列之构建脚本基础
- Gradle系列之认识Gradle任务
- Gradle系列之Gradle插件
- Gradle系列之Java Gradle插件
学习 Gradle 的目的主要是为了更好的在 Android 开发中使用 Gradle,这篇文章的主要内容是 Android Gradle 插件的相关知识,主要内容如下:
- 了解 Android Gradle 插件
- Android Gradle 插件分类
- 使用 Android Gradle 插件
- Android Gradle 工程目录
- Android Gradle 基本配置
- Android Gradle 任务
了解 Android Gradle 插件
顾名思义,Android Gradle 插件就是一个用于 Android 构建项目的一个 Gradle 插件,该插件有 Google Android 开发团队开发,而且 Android 开发 IDE Android Studio 就采用 Gradle 构建项目,下面是 Android Gradle 插件的优势:
- 方便重用代码和资源;
- 可更方便的创建应用的衍生版本,如多渠道打包;
- 配置方便。可以扩展,还可以自定义构建过程
- Android Studio 与 Gradle 深度融合
Android Gradle 插件分类
Android 插件的分类是根据 Android 工程的属性进行分类的,Android 工程分为三类,具体如下:
- App 应用工程:可生成可运行的 apk ;
- Library 库工程:可生成 aar 共其他 App 应用工程使用,使用方式和 jar 一样,里面有相关的 Android 资源文件
- Test 测试工程:用于 App 应用过程或 Library 工程进行测试。
对应的就有三种不同的 Android Gradle 插件,三类插件分别是 App 插件、Library 插件和 Test 插件,其插件 id 如下:
//App插件id
com.android.application
//Library插件id
com.android.library
//Test插件
com.android.test
使用最多的肯定就是 App 插件和 Library 插件,使用这几个插件在 Android Studio 中就可以构建 Android 工程了。
使用 Android Gradle 插件
Gradle 插件使用时以插件的 id 作为唯一标识,如果是第三方的插件,还必须在 buildscript{} 中指定其 classpath,Android Gradle 插件就属于第三方插件,使用时要指定其 classpath,Android Gradle 插件托管到 jcenter 上,所以使用时要指定对应仓库,具体参考如下:
buildscript {
//配置插件仓库
repositories {
google()
jcenter()
}
//配置依赖
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
配置好第三方插件的仓库和依赖,然后使用 apply 使用该插件,具体如下:
//使用App插件
apply plugin: 'com.android.application'
android {
//编译所依赖的Android SDK的版本
compileSdkVersion 26
//构建工具的版本
buildToolsVersion '26.0.2'
//...
}
dependencies {
//...
}
在 Android 开发中一般将插件的仓库和依赖配置到根项目下的 build.gradle 文件中,其子 Module 项目将不需要在配置了,可直接使用,这里仅仅是 App 插件的使用,当然 Libray 插件的使用和 Test 插件的使用也是一样,使用时指定对应的 plugin id 即可。
Android Gradle 工程目录
下面是 Android Studio 创建 Android 工程的 Module 的目录,这也是 Android 工程的基本目录结构,参考如下:
app
├─libs
├─proguard-rules.pro
├─build.gradle
└─src
├─androidTest
│ └─java
│
├─main
│ ├─AndroidManifest.xml
│ ├─java
│ └─res
│
└─test
└─java
上述目录中 src 下面的 main、androidTest、test 是三个 SourceSet,main 表示 App 的源代码及资源目录,android 和 test 表示 Android 相关测试代码目录,此外 proguard-rules.pro 是当前项目的混淆文件,libs 用于存放 jar、aar 等库文件,build。gradle 文件用于当前配置文件。
Android Gradle 基本配置
为了介绍 Android Gradle 插件基本配置,使用 Android Studio 创建一个 Android 项目,下面的 app 的一个配置文件,具体如下:
//使用Android Gradle插件
apply plugin: 'com.android.application'
//android{}是Android工程配置的入口
android {
/**
* 指定编译依赖的Android SDK的版本,同
* compileSdkVersion android-26
* android.compileSdkVersion = 26
* android.compileSdkVersion = 'android-26'
*/
compileSdkVersion 26
//指定构建工具的版本,也可以使用属性值buildToolsVersion设置其版本
buildToolsVersion '26.0.2'
/**
* 默认配置,defaultConfig是一个ProductFlavor,可根据不同需求生成不同的Apk
* 如果不自定义ProductFlavor进行单独配置,则该productFlavor会采用默认配置生成Apk
* 这些具体配置,如applicationID都是ProductFlavor的属性
*/
defaultConfig {
//配置唯一包名
applicationId "com.manu.androidgradleplugin"
//最低支持的Android系统版本
minSdkVersion 19
//配置应用的目标Android系统版本
targetSdkVersion 26
//用于控制应用升级的版本号
versionCode 1
//用户看到的版本名称
versionName "1.0"
//测试时用到
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
/**
* buildTypes是一个NamedDomainObjectContainer类型,是一个域对象,类似SourceSet(源集)
* buildTypes中可自定义需要构建的类型,Gradle会自动创建一个相应的BuildType,如默认的release、debug
*/
buildTypes {
release {
//设置是否为构建类型启用混淆
minifyEnabled false
//如果启用混淆则使用相应的混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
//依赖配置
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation files('libs/plugin.jar')
}
上述配置文件中已经标注了一些 Android Gradle 插件需要配置的地方,也算是对 Android Gradle 插件及项目配置文件 build.gradle 的一次理解与学习,关于 Android Gradle 插件的基本配置就到此为止,以后陆续补充。
Android Gradle 任务
Android Gradle 插件基于 Android Gradle 插件,Android Gradle 插件中包含了 Java Gradle 插件的一些任务,如 assembile、check、build等任务,此外, Android Gradle 插件还添加一些新任务,如 connectedCheck、deviceCheck、lint、install、unInstall 等 Android 开发特有的任务,可在 Android Studio 上查看 Android 开发中一些任务,选中 Android Studio 右侧标签 Gradle 就可查看,参考如下:
这篇算是初步从学习 Gradle 的角度了解了 Android Gradle 插件相关知识,后面的文章中会继续 Android Gradle 的学习。可以关注公众号:零点小筑(jzman-blog),一起交流学习。
Gradle系列之Android Gradle插件的更多相关文章
- Gradle系列之Android Gradle基础配置
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
- Gradle系列之Android Gradle高级配置
本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- Gradle系列之认识Gradle任务
原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇学习了 Gradle 构建任务的基础知识,了解了 Project 和 Task 这两个概念,建议先阅读前面几篇文章: Gradle系列 ...
- Gradle系列之初识Gradle
原文首发于微信公众号:躬行之(jzman-blog) 学习 Android 有一段时间了,开发中经常使用到 Gradle ,但是不知道 Gradle 构建项目的原理,计划花一点时间学习一下 Gradl ...
- 【Gradle】自定义Android Gradle工程
自定义Android Gradle工程 defaultConfig默认配置 defaultConfig是Android对象中的一个配置项,负责定义所有的默认配置.一个基本的defaultConfig配 ...
- Gradle系列之从零搭建Maven私服库
原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇文章学习了 Gradle 相关知识,Gradle 系列文章如下: Gradle系列之初识Gradle Gradle之Groovy基础篇 ...
- 读书笔记--Android Gradle权威指南(下)
前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...
- 读书笔记--Android Gradle权威指南(上)
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...
随机推荐
- python设计模式之外观模式
python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...
- 浏览器自动化的一些体会3 webBrowser控件之零碎问题
1. 一般需要执行这一句:webBrowser1.ScriptErrorsSuppressed = true; 主要目的是禁止跳出javascript错误的对话框,否则会导致程序无法正确地跑下去.缺点 ...
- 01@-tornado
import tornado.web ''' tornado的基础web框架模块 ''' import tornado.ioloop ''' tornado的核心IO循环模块 封装了Linux的epo ...
- 手把手教Linux驱动2-之模块参数和符号导出
通过<手把手教Linux驱动1-模块化编程,玩转module>的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数. 一.给模块传递参数 当我们加载一个模块到Li ...
- 小程序 RecorderManager计时不准确问题
官方文档:RecorderManager 录音管理器,内部实现计时不准确.有以下俩个问题: 点击暂停继续,当录音结束时,stop返回的时间包含了暂停的那一段时间. 正常录音,录音文件的时长有概率少个1 ...
- 【Flutter 实战】自定义动画-涟漪和雷达扫描
老孟导读:此篇文章是 Flutter 动画系列文章第五篇,本文介绍2个自定义动画:涟漪和雷达扫描效果. 涟漪 实现涟漪动画效果如下: 此动画通过 CustomPainter 绘制配合 Animatio ...
- [CSP-S2019]划分 题解
CSP-S2 2019 D2T2 考场上读完题感觉是DP就直接扔了开T3了,考完才发现部分分好像不难拿,枯了 题意分析 给出一个数列,要求将其分成几段,使每段的和非严格递增,求最小的每段的和的平方和. ...
- vue的修饰符
v-on 缩写:@ 事件修饰符 .stop - 调用 event.stopPropagation(). //阻止冒泡 .prevent - 调用 event.preventDefault(). //阻 ...
- 赫然:Windows Live Writer 批量博客更新软件使用教程
http://www.wocaoseo.com/thread-144-1-1.html 推广人员需要使用多个博客,一个一个登陆更新是很麻烦的事情,网上的桌面批量更新博客软件也不少,今天在此推荐大家使用 ...
- 洛谷 P4343 [SHOI2015]自动刷题机
思路 二分答案 显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍-- 可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值, ...