gradle是一个工具,同时它也是一个编程框架。使用这个工具可以完成app的编译打包等工作。

一.defaultConfig

android {compileSdkVersion 30buildToolsVersion "30.0.0"defaultConfig {applicationId "com.example.test"minSdkVersion 25targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}...
}

1)applicationId:包名,上架或sdk注册会用。

2)versionCode:版本码,用于升级、上架。

3)versionName:用于app内容设计——当前版本。

着重讲compileSdkVersion、buildToolsVersion、minSdkVersion及targetSdkVersion。

二.compileSdkVersion

SDK编译版本,compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。

需要强调的是:修改 compileSdkVersion 不会改变运行时的行为。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用。(你真的应该修复这些警告,他们的出现一定是有原因的)

因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。

注意,如果使用 Support Library ,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本号要一致!)。通常,新版的 Support Library 随着新的系统版本而发布,它为系统新增加的 API 和新特性提供兼容性支持。

当然,需要说明的是,部分Support Library中Level 不同,虽然调用方法一样,但源码可能有所改变。

比如我在 FloatingActionButton基本使用及踩坑记录 一文中就提到,Level由24升为25后,recyclerView与floatingActionButton滚动显示、隐藏时,由于CoordinatorLayout源码发生改变,调用hide()就会出现隐藏后无法显示。

buildToolsVersion:

它是用于指定项目构建工具的版本。比如27.0.2。如果有更新的版本,Android Studio会进行提示,其中包括了打包工具aapt、dx等等。这个工具的目录位于sdk/build-tools/xx.xx.xx,通过SDK Manager 更新;

三.minSdkVersion

最小的SDK版本。如果 compileSdkVersion 设置为可用的最新 API,那么 minSdkVersion 则是应用可以运行的最低要求。minSdkVersion 是 各大Android应用商店用来判断用户设备是否可以安装某个应用的标志之一。

在开发时 minSdkVersion 也起到一个重要角色:lint 默认会在项目中运行,它在你使用了低于 minSdkVersion 的 API 时会警告你,帮你避免调用不存在的 API 的运行时问题。如果只在较高版本的系统上才使用某些 API,通常使用运行时检查系统版本的方式解决。

请记住,你所使用的库,如 Support Library 或 Google Play services,可能有他们自己的 minSdkVersion 。你的应用设置的 minSdkVersion 必需大于等于这些库的 minSdkVersion 。例如有三个库,它们的 minSdkVersion 分别是 4,7 和 9 ,那么你的 minSdkVersion 必需至少是 9 才能使用它们。在少数情况下,你仍然想用一个比你应用的 minSdkVersion 还高的库(处理所有的边缘情况,确保它只在较新的平台上使用),你可以使用 tools:overrideLibrary 标记,但请做彻底的测试。

四.targetSdkVersion

三个版本号中最有趣的就是 targetSdkVersion 了。 targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。这允许你在适应新的行为变化之前就可以使用新的 API (因为你已经更新了 compileSdkVersion 不是吗?)。

targetSdkVersion指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特征。比如,Android 6.0 系统引用了运行时权限这个功能,如果你将targetSdkVersion 指定为23或者更高,那么系统就会为你的程序启动运行时权限。如果你将targetSdkVersion 指定为22,那么就说明你的程序最高只在Android 5.1系统上做过充分的测试,Android6.0系统中引入的新功能就不会启动了。

说通俗一点:比如你将targetSdkVersion 设置为22,涉及某个(或某几个)权限,你直接在mainfest中配置权限即可,然后在java代码中进行获取权限后的逻辑处理即可。
但如果你将targetSdkVersion 设置为23或更高,你除了在mainfest中配置权限外,还需要在java代码中判断用户是否同意权限,如果同意,执行什么业务操作;如果不同意,执行什么业务操作(一般是提示某某权限被拒后,某某功能无法正常使用)如果你只在mainfest中配置了权限,targetSdkVersion 又大于等于23,Java代码中不进行运行时权限的代码,你的应用程序就直接报错了。

五.总结

看完上面,你的想法是不是:既然这样,那我把targetSdkVersion 设置低一点不就更保险了。

但作为一位有良知且有追求的开发人员,不建议这么做。

总结:如果你细心的话,你会发现这三个值的关系是:

minSdkVersion<=targetSdkVersion<=compileSdkVersion

这种直觉是合理的,如果 compileSdkVersion 是你的最大值,minSdkVersion 是最小值,那么最大值必需至少和最小值一样大且 targetSdkVersion 必需在二者之间。

理想上,在稳定状态下三者的关系应该更像这样:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 targetSdkVersion 和 compileVersion 来获得最好的外观和行为。

Android基础教程(十)build.gradle文件相关推荐

  1. 浅谈Android项目中的build.gradle文件

    一.gradle简介 gradle是基于groovy语言的. Android Studio是采用Gradle来构建项目的.Gradle是一个非常先进的项目构建工具,使用了一种基于Groovy的领域特定 ...

  2. Android studio中2种build.gradle文件介绍

    根目录下的build.gradle通常不需要修改这个文件中的内容,除非需要添加一些全局的项目构建配置 buildscript {repositories {google() //声明代码托管仓库Goo ...

  3. linux android build tools,build.gradle 文件中的 Android SDK Build Tools version

    build.gradle 文件中的 Android SDK Build Tools version Android,Gradle,SDK 2018.07.17 在 Android Gradle Plu ...

  4. android build获取ext,顶级build.gradle文件中的ext属性

    我正在开发一个android应用程序.我在根项目中有一个"dependencies.gradle"文件: ext { // Android kotlinVersion = '1.2 ...

  5. Android build.gradle文件详解(转述自《Android第一行代码》第二版)

    Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...

  6. Android build.gradle文件详解

    Android build.gradle详解 什么是gradle? gradle是一个项目构建工具,java开发中有两个大名鼎鼎的项目构建Maven,Ant,其中maven简单易控深受开发者喜爱. 项 ...

  7. android 建立工程文件,Android 项目开发必备-建立属于你的build.gradle文件

    timg (1).jpg 开发一个Android项目不仅仅需要你会写java/kotlin代码,而且你还要了解各种配置文件.例如.AndroidManifest.xml,混淆文件,build.grad ...

  8. Android 中 build.gradle 文件详解

    一.简介 一般来说一个新创建的项目中,有两个 build.gradle 文件,一个是工程目录下的,一个是 app 目录下的,这两个 build.gradle 文件对 Android Studio 项目 ...

  9. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第六章:数据存储

    第 6 章 数据存储 本章介绍Android 4种存储方式的用法,包括共享参数SharedPreferences.数据库SQLite.存储卡文 件.App的全局内存,另外介绍Android重要组件-应 ...

  10. Android基础教程——从入门到精通(上)

    本文是对B站教程 动脑学院 Android教程 学习过程中所做的笔记. 文章分为上下两部分,此文是上部分,下部分链接为:Android基础教程--从入门到精通(下) 源视频教程并没有录制全,本文还补充 ...

最新文章

  1. 什么是壳 - 脱壳篇01
  2. 速览!CVPR 2020 最新论文
  3. 关于PHP的 PHP-FPM进程CPU 100%的一些原因分析和解决方案
  4. 大脑模拟AI学习策略,这项逼近反向传播的研究登上《自然-神经科学》
  5. 注意 ExecuteNonQuery() 返回值
  6. Springboot项目因为kackson版本问题启动报错解决方案
  7. Android-PullLayout
  8. Alphabet Project Loon项目负责人半年再度易人
  9. C#事件机制(记住流程)
  10. python切片操作的几种格式_【Python杂记】第四篇:序列切片
  11. c语言把一段编码注释,C语言编码规范——着重注意点整理
  12. Linux -- 以root权限安装QT5.8.0
  13. 百度人脸识别,一次耗时600毫秒
  14. linux基础(十四)定时任务和管理系统的临时文件
  15. 魅族魅蓝6简单打开usb调试模式的经验
  16. 业务流程图是什么?怎么画?
  17. 史玉柱给创业者的五条建议
  18. 秦曾昌人工智能课程---2、机器学习中的数学基础2
  19. CVPR 2017:Interspeices Knowledge Transfer for Facial KeyPoint Detection(跨物种脸部关键点检测知识迁移)
  20. 计算机所需要的数学基础知识,学计算机需要什么基础 数学不好能学计算机吗...

热门文章

  1. [001] winnie the pooh - 读后记
  2. 史上最强Tomcat8性能优化
  3. 8086/8088 寻址方式
  4. Pytorch note
  5. 国家超级计算机 甘霖,记国家超级计算无锡中心主任助理甘霖:让“中国超算”扬威世界...
  6. hadoop3 任务卡在map 0% reduce 0%的解决方案
  7. 水立方是高级场馆,人立方同样
  8. [N9H30]在例程中使用printf导致程序无法运行
  9. Uniapp Video MP4视频播放失败,只有声音,黑屏,视频播放不了,解决办法
  10. gradle ERROR: All flavors must now belong to a named flavor dimension.