以Android Studio讲解Gradle在Android项目中的应用(一)

本文名词:

Gradle/Android/Android Studio/android gradle plugin
在本文中AS代表Android Studio,gradle插件代表android gradle plugin。

本文目录:

  1. 什么是Gradle?
  2. Gradle的功能
  3. gradle与android studio的关系
  4. android项目中的gradle文件
  5. 扩展-不借助IDE使用gradle

什么是Gradle?

Gradle是一个基于JVM的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,面向Java应用为主。
什么是构建工具?
构建工具是一个把源代码(java)生成可执行应用程序(apk)的过程自动化的程序。构建包括编译、连接跟把代码打包成可用的或可执行的形式。
为什么要使用构建工具或构建自动化
将源代码生成应用程序的大致过程如下:

  • 下载依赖包
  • 将源代码编译成二进制代码
  • 打包生成的二进制代码
  • 进行单元测试
  • 部署到系统

此过程手动操作相当繁琐,而且在编写源码的过程中,经常会需要将源代码生成可执行文件并安装在系统中,进行调试,在小型项目中,可以手动调用构建过程,但是在大型的项目中很不实用,在构建过程中难以跟踪什么需要被构建、按照什么顺序构建以及项目中存在哪些依赖。使用自动化工具会使构建过程更为连续,而且可以让开发人员更专注于项目的开发。

Gradle的功能

上面我们了解了Gradle是将源代码生成可执行文件的工具,但是Gradle具体功能分为哪些呢?这些功能在此过程中起的作用?
Gradle的具体功能分为以下几种:

  • 依赖管理

在项目开发中,经常会依赖第三方库,使用第三方库的步骤是先下载jar文件,然后将jar文件加入到项目的lib中,然后项目才可以使用,但是一旦jar文件更新,就需要重新下载新的jar包,重新替换,项目依赖的jar包多的时候,此工作量也很麻烦,可以说这种方式只有依赖,没有管理。
Gradle 引用第三方库方式是这样的:
compile ‘com.android.support:support-v4:24.0.1’
类似这样的依赖方式,是不是很方便?而且很直观,直接可以看到源地址,升级的话直接改下版本号就可以了,这就是所谓的依赖管理,此依赖管理只限于google开发的jar包

  • 编译

将java源代码或资源编译为.class文件的过程。

  • 打包

将.class文件打包为一个apk文件的过程。

  • 签名

android系统及应用商店特性,在android系统中运行apk或在android应用商店发布apk,需要对apk进行签名。

  • 运行

用户使用apk的过程,包含类的加载,类的执行等,即将apk在目标系统运行的过程。

gradle和android studio的关系

gradle是由Gradle公司开发的,android studio是由google开发的集成开发工具,主要用于android项目的开发和调试,支持gradle构建工具,gradle公司专门开发了android gradle plugin用于android studio来支持android项目的构建。
在安装android studio时会安装当前AS版本支持的最新的gradle和android gradle plugin的版本,默认路径分别为:
gradle默认路径:C:\Users\用户.gradle\wrapper\dists
android gradle plugin默认路径:C:\Users\Administrator.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle

gradle其余版本可以手动去官网下载,然后解压至默认路径即可,android gradle plugin在项目使用时会自动下载,不需要手动下载,但注意电脑需要联网才可以自动下载
需要注意的是:gradle是gradle公司开发,有版本号规则,android gradle plugin的版本号是由google定义的,有另外的定义规则,gradle和android gradle plugin版本不是对应的,因此在使用的时候注意版本的对应,另外android gradle plugin版本对应的gradle版本有限制,例如:android gradle plugin 3.5.0+只能对应gradle的5.4.1~5.6.4版本。

android项目中的gradle文件

AS通过gradle构建工具构建android项目,gradle是依据什么来构建android项目的?
在每个android项目中都有相应的gradle配置文件,gradle通过读取这些配置文件,对android项目进行构建,每个项目中包含的gradle文件分别有以下几种:
以Android Studio讲解Gradle在Android项目中的应用(一)_第1张图片

  • 项目文件夹下的.gradle文件夹
    此文件夹是项目构建项目时生成的临时文件,可删除。
  • 项目文件夹下的gradle文件夹
    此文件夹中有一个wrapper文件夹,wrapper文件夹内有一个jar包和gradle-wrapper.properties配置文件,此文件夹的意思是gradle包装。
    何为gradle包装?为什么要有gradle包装?
    gradle wrapper是为了实现支持多项目,也就是实现每个项目有不同的gradle版本而存在的。
    具体解释如下:
    默认新建一个项目,然后点击 AS 上的运行,默认就会直接帮你安装 Gradle ,我们不需要额外的安装 Gradle 了,但是其实这个 Gradle 不是真正的 Gradle ,他叫 Gradle Wrapper ,意为 Gradle 的包装,什么意思呢?假设我们本地有多个项目,一个是比较老的项目,还用着 Gradle 1.0 的版本,一个是比较新的项目用了 Gradle 2.0 的版本,但是你两个项目肯定都想要同时运行的,如果你只装了 Gradle 1.0 的话那肯定不行,所以为了解决这个问题,Google 推出了 Gradle Wrapper 的概念,就是他在你每个项目都配置了一个指定版本的 Gradle ,你可以理解为每个 Android 项目本地都有一个小型的 Gradle ,通过这个每个项目你可以支持用不同的 Gradle 版本来构建项目。
    gradle-wrapper.jar文件是在AS安装时即存在在安装路径中,在安装文件中的路径为D:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper\gradle\wrapper,新建项目时拷贝一份至wrapper文件夹中,所有Android项目中此文件均一样。
    gradle-wrapper.properties文件中定义了Gradle的路径以及版本,内容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
  • 项目文件夹下的build.gradle

此文件内配置了项目使用的android gradle plugin的插件版本。

dependencies {
    classpath 'com.android.tools.build:gradle:3.5.2'
}
  • 项目文件夹下的setting.gradle

此文件是全局的项目配置文件,里面主要声明一些需要加入 gradle 的 module。

include ':app'
rootProject.name='MVPDemo'  //此为项目名称
  • 项目文件下的gradlew以及gradlew.bat文件

这两个文件同项目文件夹下的gradle包装中的jar文件,都是在新建项目时复制过来的文件,其目录为D:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper,gradlew是在linux和mac下使用的,gradlew.bat是在window下使用的,提供在命令行下执行gradle命令的功能。

  • app或各module文件夹下的build文件夹

此文件夹为项目编译运行过程中的临时文件,可删除,注意:生成的apk文件在此文件夹中。

  • app或各module文件夹下的build.gradle

此文件配置了项目的编译sdk,目标sdk,最低支持的sdk版本以及项目依赖库,下面的代码展示的为app下的配置文件。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.mvpdemo"
        minSdkVersion 19
        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 内容为项目依赖库
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

扩展-不借助IDE使用Gradle

gradle支持android项目,AS或其他IDE不是必须的,可以不借助IDE来构建项目,需要手动编写gradle配置文件,使用命令行调用gradle命令进行构建,下面简单介绍几个常用的gradle命令,此命令针对windows系统,使用以下命令时需要将目录切换到项目文件夹下方可使用,因为以下命令是针对项目的。
gradlew -v
使用gradle wrapper命令查询项目使用的gradle版本号。

gradlew build
检查依赖并编译打包,此命令把debug和release环境下的包都打包出来,如果正式发布只需要release包,可以参照下条命令。

gradlew assembleRelease
编译并打包release包。

gradlew assembleDebug
编译并打包debug包。

参考链接:
https://zhuanlan.zhihu.com/p/21473540

你可能感兴趣的:(Android进阶)