Gradle学习之Android-DSL AppExtension篇
前言:上一篇文章已经讲解了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篇相关推荐
- MTK平台camera bsp学习之android平台架构篇
android平台架构(简单了解,都是csdn上看其他博客摘抄下来) 从上到下:分为 APP层 framework层 native层 hal层 kernel层 camera bsp侧重点:kernel ...
- Gradle for Android 第三篇( 依赖管理 )
Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...
- 【Android,Kotlin,TFLite】移动设备集成深度学习轻模型TFlite(图像分类篇)
深度学习.Tensorflow.TFLite.移动设备集成深度学习轻模型TFlite.图像分类篇 Why i create it? 为了创建一个易用且易于集成的TFlite加载库, 所以TFLiteL ...
- 【Android Gradle 插件】Android Plugin DSL Reference 离线文档下载 ( GitHub 下载文档 | 查看文档 )
文章目录 一.Android Plugin DSL Reference 文档下载 二.Android Plugin DSL Reference 文档查看 一.Android Plugin DSL Re ...
- android studio gradle 学习,学习Android Studio里的Gradle
一直听说Gradle很强大,只是偶尔用Android Studio创建Demo的时候看到他一次,今天抽个时间完整记录一下. 1.gradle位置 Android Studio项目创建好之后,默认有3个 ...
- 我们究竟还要学习哪些Android知识?看这一篇就够了!
雪上加霜 本人一名Android程序员,今年29岁了.大厂小厂都呆过,现在在腾讯工作!明明工作顺利,家庭和睦儿女成全,但是总是会感觉到,一股无形的压力,推着我走!作为一名程序员我最怕的不是996,也是 ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
文章目录 一.列举 build.gradle 中常用 android 模块配置 二.android 模块常用配置介绍 1.compileSdkVersion 配置 2.buildToolsVersio ...
- gradle 打包Android,用Gradle 插件打包android程序
类型:社交聊天大小:1012KB语言:中文 评分:.0 标签: 立即下载 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是grad ...
最新文章
- 适用matlab获取奥比深度流和视频流的方法
- 总结Unity 初学者容易犯的编译与运行时错误(第三部分)
- 开发时经常用到的Util --- 1
- MyEclipse Spring 学习总结一 Spring IOC容器
- 一天搞定CSS: 浮动(float)与inline-block的区别--11
- 嵌入式系统笔录(1)-嵌入式系统内核
- Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers
- 守卫者的挑战(guard)
- C++中使用TCP传文件
- phpcmsV9 QQ互联 相关文件配置成功 - 总结篇
- Beta冲刺 第一天
- 分布式事务处理学习报告
- Beta冲刺随笔汇总
- Java查看某个类的帮助文档
- linux串口dma,详解linux dma驱动编写
- 实战破解思科模拟器packet tracer-去除登陆窗口
- Mybatis+Servlet+jsp
- 21根火柴取放 c语言,趣味C语言题Word版
- 思考方法,程序员生存之道
- 基于Java毕业设计高校共享机房管理系统的设计与实现源码+系统+mysql+lw文档+部署软件