Android Gradle 插件_第1张图片

Android Gradle 简介

从 Gradle 角度看,Android 插件是由 Google 的 Android 团队开发的一个第三方插件。

从 Android 的角度看,Android 插件是基于 Gradle 构建的,是和 Android studio 完美搭配的新一代构建系统。

使用它可以很轻松的执行以下操作:
自定义,配置和扩展编译流程。
使用相同的项目和模块为你的应用创建多个具有不同功能的 APK。
在不同源集之间重复使用代码和资源。

利用 Gradle 的灵活性,可以在不修改应用核心源文件的情况下完成以上所有操作。

Android 插件能做的还有很多,更多的可以参阅 配置构建

插件分类

Android 插件的分类其实是根据 Android 工程的属性分类的。

在 Android 中有很多种工程类型,常见的有

  • App 应用工程,用于生成可运行的 APK 。
  • Library 库工程,用于生成 AAR 包给其他 APK 应用工程公用。

分别对应的插件 ID 是

  • App 插件 :com.android.application
  • Library 插件:com.android.library

在创建 Module 时就可以看到很多类型

Android Gradle 插件_第2张图片

通过应用以上不同的插件就可以配置不同的 Android 工程,然后配合 Android studio 就可以分别对它们进行编译,测试,发布等操作。

应用插件

在 Android studio 里创建 Module 的时候选择不同的工程会自动应用对应的插件。

如果不配合 Android studio 应用,可以在配置脚本 build.gradle 里设置对应的插件ID 。
因为 Android 插件是托管在 jcenter 仓库上的,所以必须在 repositories{} 添加 jcenter 仓库。

这样就能找到 Android 插件了,具体为什么这么做,看这里。
然后是把构件依赖添加到 classpath 。

这一步一般是在根项目的配置文件里配置的,这样就不用每一个子项目都配置了。

buildscript {        repositories {        jcenter()            }    dependencies {        classpath 'com.android.tools.build:gradle:3.6.3'    }}

最后就是在子项目里应用插件了。

apply plugin: 'com.android.application'apply plugin: 'com.android.library'

任务

Android 插件是继承自 Java 插件的,自然把 Java 的任务也继承来了,例如

  • assemble
  • build
  • clean
  • check

除了继承 Java 插件的,Android 插件本身也添加了自己的任务,例如

  • connectCheck 在所有连接设备或者模拟器上运行 check 检查。
  • deviceCheck 通过 API 链接远程设备运行 checks 。它被用于 CI 服务器上。
  • lint 在所有的 ProductFlabor 上运行 lint 检查。
  • install 在已连接的设备上安装 应用。
  • uninstall 在已连接的设备上卸载应用。

除此之外还有些不太常用的任务:

  • signingReport 可以打印应用的签名
  • androidDependencies 可以打印 Android 的依赖。

一般我们常用的任务是 build、assemble、clean、check、lint等,通过这些任务可以对应用进行打包生成 APK,对现有的 Android 工程进行 lint 检查等。

还有一些其他的任务,可以通过命令查看

gradle tasks 

Android Gradle 插件_第3张图片

在 Android studio 的 Gradle 窗口也可以看到所有的任务

Android Gradle 插件_第4张图片

关于 Java 插件的介绍,移步 Java 插件

Android 工程详细示例

Android 插件继承自 Java 插件,具备 Java 插件所有的特性,其目录结构也和 Java 差不多。

使用 Android studio 创建一个工程,可以得到以下目录:

Android Gradle 插件_第5张图片

我们的重点放在项目的配置脚本文件上,大部分的配置是在这里的。

这是一个标准的多项目的 Gradle 目录。

  • settings.gradle 配置参与构建的项目,会在初始化阶段被执行。
  • local.properties 是本地配置,配置 sdk和ndk 的位置。
  • gradlew.bat Gradle 在 windows 系统下的执行脚本
  • gradlew Gradle 在 unix 系统下的执行脚本
  • gradle.properties Gradle属性配置文件
  • build.gradle Gradle 配置文件 这里是根项目的配置文件。
  • *.iml Android studio 自动生成的文件,每个项目都会生成一个。
  • .gitignore Git 的忽略配置
  • gradle/wrapper 目录是 Gradle Wrapper 使用的目录
  • gradle-wrapper.jar 是执行 Gradle Wrapper 使用的
  • gradle-wrapper.properties 是配置 Gradle Wrapper 属性的
  • app 目录是默认创建的一个 App 应用工程。在 settings.gradle 里会默认导入此子项目。

关于更多 Gradle 介绍,移步 Gradle 系列,在持续更新中。

settings.gradle

//项目名称,默认是目录名字rootProject.name='AndroidGradleExample'//导入子项目 app include ':app'

local.properties

# 配置 SDK 在本机的目录,创建项目时,Android studio 会自动配置,如果需要自己单独设置,可以更改sdk.dir=/Users/skymxc/Library/Android/sdk# ndk 在本机的目录 需要时配置##ndk.dir=/Users/skymxc/Library/Android/sdk/ndk-bundle

gradle.properties

# 使用 AndroidX 更多详细可查看 https://developer.android.com/topic/libraries/support-library/androidx-rnandroid.useAndroidX=true# 自动转换第三方库使用 androidx ;Automatically convert third-party libraries to use AndroidXandroid.enableJetifier=true# 为 JVM 守护进程指定参数;Specifies the JVM arguments used for the daemon process.# 调整内存设置的参数;The setting is particularly useful for tweaking memory settings.org.gradle.jvmargs=-Xmx1536m

.gitignore

*.iml.gradle.idea/local.properties/.idea/caches/.idea/libraries/.idea/modules.xml/.idea/workspace.xml/.idea/navEditor.xml/.idea/assetWizardSettings.xml.DS_Store/build/captures.externalNativeBuild.cxx

build.gradle 根项目的配置脚本,可以在这里配置所有项目都会用到的共性配置,例如配置所有子项目都会使用的仓库。

// Top-level build file where you can add configuration options common to all sub-projects/modules.//顶层配置文件,这里添加的配置可选择配置到所有子项目//配置脚本,主要是配置 Gradle 脚本执行使用的依赖。buildscript {    //使用的插件所在的仓库,例如 Android 插件就放在了 jcenter 上    repositories {        google()        jcenter()            }    //使用的插件依赖    dependencies {        // Android 构建工具        classpath 'com.android.tools.build:gradle:3.6.3'                // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files        //注意:不要子项目的依赖放在这里,各自项目的依赖应该放在各自项目的 build.gralde 配置脚本里。        //这里的配置会应用到所有项目。    }}//会遍历所有子项目,这里相当于给所有项目都配置了仓库了。allprojects {    //给所有项目配置仓库    repositories {        google()        jcenter()            }}// 配置 clean 任务,删除根目录的 build 目录。task clean(type: Delete) {    delete rootProject.buildDir}

应用工程目录

Android Gradle 插件_第6张图片

  • libs 放置第三方的 jar ,也可以放置 so 库。
  • src 源文件
  • src/androidTest Android测试目录,这里可以写测试代码,执行测试
  • src/main main源集,其中 java 目录是 java 源代码,res 目录是资源目录
  • src/test 测试目录,其中 java 目录可以写单元测试等测试代码,执行测试
  • .gitignore git 忽略文件
  • build.gradle Gradle 配置脚本
  • proguard-rules.pro 配置Proguard 混淆规则;
  • AndroidManifest.xml Android 清单文件;常见的配置有四大组件,使用的权限;

app/.gitignore

/build

app/build.gradle

//使用 Android 应用插件apply plugin: 'com.android.application'// android 是 Android插件提供的扩展类型。 Android 工程的配置都可以在这里配置。android {    //编译的SDK 版本    compileSdkVersion 29    //构建工具版本    buildToolsVersion "29.0.2"    //默认配置,它是一个 ProductFlavor    defaultConfig {        //应用程序ID,创建时的包名,可以更改。        applicationId "cn.sintoon.androidgradleexample"        //最小支持的SDK 版本        minSdkVersion 19        //目标 SDK 版本        targetSdkVersion 29        //应用版本代码,一般用于控制APP的升级。        versionCode 1        //应用版本名称,用户可以看到。        versionName "1.0"        //配置单元测试使用的 runner        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"    }    //构建类型    buildTypes {        //发布类型        release {            //是否启用混淆            minifyEnabled false            //proguard 规则文件;            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }}//使用的依赖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'}

Android 工程的配置都在 android{} 中。通过它,可以对 Android Gradle 工程进行自定义配置。

defaultConfig{} 里是默认的配置,它是一个 ProductFlavor 。

getDefaultProguardFile 是 Android 扩展的一个方法,它可以获取你的 Android SDK 目录下默认的 proguard 配置文件。 在 android-sdk/tools/proguard/ 目录下,文件名就是传入的参数 proguard-android-optimize.txt 。


我在 github 建了一个仓库,是 Android 插件的配置示例,会持续把所有的配置和注释都记录在这里以供查阅,AndroidGradleExample。

微信扫一扫,关注我的公众号

微信扫一扫,关注我的公众号.jpg

更多相关文章

  1. android 中一个项目工程引用另一个项目工程和jar
  2. 《ZigBee开发笔记》第六部分 项目篇 基于ZigBee和Openwrt的智能
  3. 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
  4. Android 精选项目简介(可参考)
  5. Android 升级Android Studio升级3.5提示下载fastutil插件
  6. 【android studio】导入项目后无法运行,修改了gradle还是没用,求助
  7. Android Studio 项目运行错误,弹出“Detected ADB对话框”
  8. android 获取sd卡根目录
  9. android 文件目录权限

随机推荐

  1. mysql中的跨库关联查询方法
  2. MYSQL实现连续签到功能断签一天从头开始(
  3. MySQL实现创建存储过程并循环添加记录的
  4. 分享101个MySQL调试与优化技巧
  5. ubuntu下在docker中安装mysql5.6 的方法
  6. mysql中mydumper 和 mysqldump 对比使用
  7. mysql mycat 中间件安装与使用
  8. mysql中索引与FROM_UNIXTIME的问题
  9. Linux下安装配置MySQL
  10. mysql中count(), group by, order by使用