Android 开发的一大优点是可以运行代码的设备数量非常多——从 Nexus One 到 Pixel,再到平板电脑等外形尺寸,再到 Pixelbook,再到手表、电视和汽车。
当为 Android 编写代码时,开发者不会为这些不同的设备中的每一个编写完全独立的应用程序——即使是在完全不同的外形尺寸(如手表和电视)上运行的应用程序也可以共享代码。但是,开发者仍然需要了解一些限制和兼容性策略来支持所有这些。
当我们创建项目时,选择了我们的应用支持的特定Android API级别,

就是这个。
Android操作系统有着不同的版本号,以字母顺序命名的“食物”,

J K L M N O P Q R …
每个操作系统版本都附带着新的特性和功能,例如:Android Oreo中支持了“画中画”应用,而Android Ple引入了Slices。
API级别对应着Android版本,例如,API 19 对应于 Android 4.4 (KitKat)。

由于很多因素,包括硬件可以支持什么、用户是否选择更新他们的设备以及制造商是否支持不同的操作系统级别,开发者最终不可避免的会使用并运行不同操作系统版本的设备。
创建应用时,我们会指定本应用支持的最低API级别,

应用程序还有一个编译级别和一个目标级别,这些级别都是Gradle构建文件中的配置参数。
build.gradle (Module: app)

此文件定义应用程序模块(app)的构建参数和依赖项。
build.gradle (Project: DiceRoller)

而这个文件定义了整个项目的构建参数。
在许多情况下,我们的应用程序模块是您项目中的唯一模块,因此这种划分可能看起来很随意。但是如果应用变得更加复杂并且我们将它拆分成几个部分,或者如果应用支持像 Android watch 这样的平台,我们可能会在同一个项目中遇到不同的模块。

compileSdk:此参数指定 Gradle 用于编译应用程序的 Android API 级别。这是应用可以支持的最新版本的 Android。也就是说,现在的应用可以使用此 API 级别及更低级别中包含的 API 功能。在这种情况下,应用支持 API 32,至少到现在,这是个非常新的版本了。

targetSdk:此值是针对应用测试过的最新 API。在许多情况下,与compileSdk值一样。
minSdk:此参数是三个参数中最重要的一个,因为它决定了我们的应用运行的最旧的 Android 版本。运行早于此 API 级别的 Android 操作系统的设备根本无法运行。
设置应用的最低API级别可能具有挑战性
为不同的Android API级别编写应用程序是开发人员面临的常见挑战,Android 框架团队做了很多工作帮助开发者。
2011 年,该团队发布了第一个支持库,这是一个由 Google 开发的库,提供向后兼容的类和有用的功能。2018 年,谷歌发布了 Android Jetpack,这是一个库集合,包含了支持库的许多以前的类和功能,同时还在支持库上进行了扩展。

AppCompatActivity是一个兼容性类,可确保我们的Activity在不同平台操作系统级别上运行看起来相同。

可以看到,AppCompatActivity该类是从androidx.appcompat.app包中导入的。Android Jetpack 库的命名空间是androidx.


这些xml文件,用于定义各种颜色和形状,这种文件被称为矢量可绘制文件。
这种文件绘图即矢量绘图与位图图像格式如PNG的优势在于,矢量绘图可以在不损失质量的情况下进行缩放,另外矢量可绘制文件通常比位图格式的相同的图像,文件大小小很多。
其实矢量可绘制对象是在API 21及更高版本中支持的,但是如果应用程序的最低SDK设置为API 19,应用程序也可以正常构建和运行。
为什么呢?
当我们构建应用程序时,Gradle构建过程中会从矢量文件生成一个PNG文件,这些PNG文件可以在21版本以下的任何Android上使用。但是这些额外的PNG文件会增加应用程序的大小。这是不好的。
庆幸的是,有一个可用于矢量可绘制对象AndroidX 兼容性库,一直到API level 7. 2,

加入这句,重新同步,
在布局文件中加入

将元素中的android:src属性更改为.

app:srcCompat属性使用 Android X 库来支持旧版本 Android 中的矢量可绘制对象,一直到API 7。
构建并运行,没有任何看得到的变化,,但现在应用程序不需要为图像使用生成的 PNG 文件,无论在哪里运行,这意味着应用程序文件更小。