一、 gradle 作用
Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的自动化构建工具【打包 apk 的工具(也可称为构建工具)】。Android 构建系统的作用:编译应用资源和源代码,并将它们打包成 apk。
过去 Java 工作者使用 Maven 和 Ant 结合实现部署的自动化,但这两个工具各有优缺点。当项目依赖库的版本变化频繁时,Ant 操作起来较麻烦;当琐碎工作多时,Maven 不能胜任。并且 Maven 和 Ant 都是基于 XML进行配置,无法直观地表达 if、switch 等语法,即使写出来了可读性也不高。而 Gradle 改良了过去 Maven 和 Ant 带给开发者的问题,至今也成为 AS 内置的封装部署工具。
- 根据配置文件管理项目依赖:取自 Maven Repos 的概念
- 自动处理部署问题:取自 Ant 概念
- 条件判断写法直觉:取自 Groovy 语言
二、使用 gradle
1.相关概念
(1)gradle 和 maven、ant 的关系
Ant:eclipse 的 SDK 中一开始集成了一种工具名为 Ant,用于构建 apk。
maven:原来开发过程中,如果想要引用某些 jar 包的话需要自己下载,然后放到 libs 下。maven 简化了开发者的工具,将需要的依赖库配置在文件中,它帮助我们自动下载。
gradle:是基于 Apache Ant 概念和 Apache Maven 概念的项目自动化构建工具。它使用基于 Groovy 的领域特定语言来声明项目设置,而不是 xml。即可通过配置自动下载依赖库也可构建 apk,可视为上述二者的功能集合体。 它使用一种基于 Groovy 的领域特定语言来声明项目设置,而不是传统的 xml。
AS 使用 Gradle 这一高级构建工具包来自动化执行和管理构建流程美瞳是也对所有应用版本共有的部分加以重复利用。Android Plugin for Gradle 与这个构建工具包协作,共同提供专用于构建和测试 Android 应用的流程和可配置设置。
Gradle 和 Gradle Plugin 独立于 AS 运行。这意味着,可以在 Android Studio 内、使用计算机上的命令行工具或在未安装 Android Studio 的计算机(例如持续性集成服务器)上构建 Android 应用。
(2)AS 中和 gradle 相关的文件
setting.gradle
配置工程下的模块。例如工程下有4个模块,那么按下文所示进行配置。
include ':app', ':myapplication2'
模块名前加:
,并且用单引号括起来。
gradle-wrapper.properties
#Wed Jul 03 17:24:15 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
用于告诉开发工具,当我们的电脑上没有 gradle 工具时,它去哪里下载,该下载哪个版本。
工程下的 build.gradle
进行各个模块的一些通用配置。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
a)gradle 相关配置
配置 gradle plugin 版本
b)各个模块通用的配置
如:从哪个库下载 jar 包
c)ext 参数配置
模块下的 build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.0"
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
a)基本参数配置
包名 appId、sdk版本号
b)buildTypes
可配置发布版、调试版的相关信息
c)dependencies
通过以下明天将libs
文件夹下的 jar 包存包含到工程中
compile fileTree(dir:libs,include:['*.jar'])
为该模块添加依赖模块
compile ':MyLib'
为该模块添加 jar 包
compile 'com.android.support:appcompat-v7:23.4.0'
:
分隔开的 3 项分别表示:该jar 包在 maven 库中的存放路径、包的名称、包的版本
网友评论