前言:上一篇文章已经讲解了Gradle的语法篇,接下来我们要开始学习android-gradle-dsl了,不过我上一篇漏写了一节函数,这个我打算接下来补上,俗话说的好墨刀不误砍柴工,上一篇文章我们的刀已经磨好了,下面我们开始收获我们的成果了,或者说该应用实战了。

什么是AppExtension

其实就是一个队gradle配置android项目的一个拓展,对于android studio build.gradle 配置如下的属于AppExtension

apply plugin: 'com.android.application'

其实这里你可以认为是一个编译好的jar包,里面放置了一下方法,属性之类的东西,那么问题来了,这个jar报什么时候引入的呢,这里我们可以去看项目根目录的build.gradle 配置文件,如下

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

可能这个比喻不太恰当,但是我们可以先这样理解

AppExtension包含的常用属性

1. applicationVariants 这个属性是一个DomainObjectSet集合

DomainObjectSet<ApplicationVariant> applicationVariants

官方解释是:Returns a collection of build variants that the app project includes.(返回App构建变种的集合) 大概是这个意思哈,何为变种呢,其实我们可认为是不同版本的集合,比如测试版,uat版本,金丝雀版本,正式版本,可以有不同的logo,不同的app_name,这种就叫做变体或变种。

内部方法较多,这里就不一一展开了,我们来看下android studio里面常用的方法吧 如果赶兴趣课访问https://docs.gradle.org/current/javadoc/org/gradle/api/DomainObjectSet.html 查看更多方法及属性

android.applicationVariants.all { variant ->variant.outputs.all {outputFileName = "${project.getName()}_${variant.versionName}_${variant.versionCode}_${variant.name}.apk"}
}

这段代码是对生成的apk文件进行重命名,这样每次打包出来的人家就不会再是默认的,可以根据文件名来区分版本等信息。

2. buildToolsVersion 指定构建项目时要使用的SDK构建工具的版本。

String buildToolsVersion

buildToolsVersion 构建工具的版本,这里指Android SDK构建工具的版本号,是一个String类型,这里也就解释了为啥我们创建的buildToolsVersion需要用’'包起来,因为类型是String嘛,下面我们展示一下创建项目默认的配置,值得注意的是下图的buildToolsVersion并不是一个属性而是一个方法,类似于我们的get,set方法,用一个方法来设置值这样也很符合封装的概念

android {compileSdkVersion 27buildToolsVersion '27.0.1'// buildToolsVersion ('27.0.1')defaultConfig {applicationId "com.tjtech.flutterapp"minSdkVersion 16targetSdkVersion 27versionCode 1versionName 'v1.0.0'testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}buildTypes {release {signingConfig signingConfigs.release}}
}

当然如果你的gradle的插件版本高于或正好3.0.0,那么这个属性不设置也是可以的,gradle默认会给你设置一个与插件版本相匹配的最低buildToolsVersion版本

3. compileSdkVersion
指定用于编译项目的SDK code。

String compileSdkVersion

compileSdkVersion 同样也是一个String类型的数据,在Android studio里面的配置确实int类型,这样就让人很奇怪了,按说如果compileSdkVersion这个属性是String类型,设置的时候应该也是String才对,然而当写法如下的时候

android {compileSdkVersion '28'buildToolsVersion '27.0.1'defaultConfig {applicationId "com.tjtech.gradle"minSdkVersion 15targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}
}

以上代码是会报错的错误
Failed to find target with hash string ‘28’ in: /Users/antonio/Library/Android/sdk
Install missing platform(s) and sync project 这个错误告诉你你没有安装对应版本的sdk,但是其实我本地安装过了28版本的sdk,那问题就来了,这是为什么呢,答案就在BaseExtension类里面的两个方法

    public void compileSdkVersion(String version) {this.checkWritability();this.target = version;}public void compileSdkVersion(int apiLevel) {this.compileSdkVersion("android-" + apiLevel);}

看到这里应该发现了问题,compileSdkVersion是一个方法,并且有重载,分别可以传int型的和String型的,而String型的应该为 android-版本 这样的格式才是可以正常接收的,那么我们下面再来列举下例子

传String的正确做法

android {compileSdkVersion 'android-28'//或compileSdkVersion('android-28')buildToolsVersion '27.0.1'defaultConfig {applicationId "com.tjtech.gradle"minSdkVersion 15targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}
}

传int的正确做法

android {compileSdkVersion 28//或 compileSdkVersion(28)buildToolsVersion '27.0.1'defaultConfig {applicationId "com.tjtech.gradle"minSdkVersion 15targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}
}

想比之下也能解释为啥默认创建的配置是这样了。
好了今天的文章就先到这里了,AppExtension的属性太多,一篇文章写完,后期我会继续讲解剩下的一些配置理解。

大家都在读

徐汇三少齐聚Google I/O 2018 参悟大道

Gradle学习之Groovy语法篇

Jenkins与Sonar的欢乐

Centos 持续化集成之Jenkins

本公众号聚焦于『Android开发前沿、生活感悟、妹子图』,欢迎大家关注AntonioShare:

Gradle学习之Android-DSL AppExtension篇相关推荐

  1. MTK平台camera bsp学习之android平台架构篇

    android平台架构(简单了解,都是csdn上看其他博客摘抄下来) 从上到下:分为 APP层 framework层 native层 hal层 kernel层 camera bsp侧重点:kernel ...

  2. Gradle for Android 第三篇( 依赖管理 )

    Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...

  3. 【Android,Kotlin,TFLite】移动设备集成深度学习轻模型TFlite(图像分类篇)

    深度学习.Tensorflow.TFLite.移动设备集成深度学习轻模型TFlite.图像分类篇 Why i create it? 为了创建一个易用且易于集成的TFlite加载库, 所以TFLiteL ...

  4. 【Android Gradle 插件】Android Plugin DSL Reference 离线文档下载 ( GitHub 下载文档 | 查看文档 )

    文章目录 一.Android Plugin DSL Reference 文档下载 二.Android Plugin DSL Reference 文档查看 一.Android Plugin DSL Re ...

  5. android studio gradle 学习,学习Android Studio里的Gradle

    一直听说Gradle很强大,只是偶尔用Android Studio创建Demo的时候看到他一次,今天抽个时间完整记录一下. 1.gradle位置 Android Studio项目创建好之后,默认有3个 ...

  6. 我们究竟还要学习哪些Android知识?看这一篇就够了!

    雪上加霜 本人一名Android程序员,今年29岁了.大厂小厂都呆过,现在在腾讯工作!明明工作顺利,家庭和睦儿女成全,但是总是会感觉到,一股无形的压力,推着我走!作为一名程序员我最怕的不是996,也是 ...

  7. Android Gradle 构建工具(Android Gradle Build Tools)是什么?

    转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...

  8. 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )

    文章目录 一.列举 build.gradle 中常用 android 模块配置 二.android 模块常用配置介绍 1.compileSdkVersion 配置 2.buildToolsVersio ...

  9. gradle 打包Android,用Gradle 插件打包android程序

    类型:社交聊天大小:1012KB语言:中文 评分:.0 标签: 立即下载 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是grad ...

最新文章

  1. 适用matlab获取奥比深度流和视频流的方法
  2. 总结Unity 初学者容易犯的编译与运行时错误(第三部分)
  3. 开发时经常用到的Util --- 1
  4. MyEclipse Spring 学习总结一 Spring IOC容器
  5. 一天搞定CSS: 浮动(float)与inline-block的区别--11
  6. 嵌入式系统笔录(1)-嵌入式系统内核
  7. Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers
  8. 守卫者的挑战(guard)
  9. C++中使用TCP传文件
  10. phpcmsV9 QQ互联 相关文件配置成功 - 总结篇
  11. Beta冲刺 第一天
  12. 分布式事务处理学习报告
  13. Beta冲刺随笔汇总
  14. Java查看某个类的帮助文档
  15. linux串口dma,详解linux dma驱动编写
  16. 实战破解思科模拟器packet tracer-去除登陆窗口
  17. Mybatis+Servlet+jsp
  18. 21根火柴取放 c语言,趣味C语言题Word版
  19. 思考方法,程序员生存之道
  20. 基于Java毕业设计高校共享机房管理系统的设计与实现源码+系统+mysql+lw文档+部署软件

热门文章

  1. Vuetity水平垂直居中
  2. excel怎么设置打印区域_Excel如何设置打印区域及打印区域如何调整
  3. memcached win64位服务端安装和java客户端实例
  4. Revit完整案例教程
  5. Obsidian 插件(一):DataView 的使用
  6. Security+知识点
  7. 图像处理之老照片特效
  8. 海思入门笔记二:HiBurn工具实现镜像烧写
  9. GaussDB常用命令
  10. 实现齿轮转动动画CSS3特效