MASTG-BEST-0010: 使用最新 minSdkVersion
确保 build.gradle
文件中的 minSdkVersion
设置为最新的 Android 平台版本,该版本与您应用的需求相符,同时保持与用户群的兼容性。
公司通常会犹豫是否增加 minSdkVersion
,因为他们希望他们的应用能在尽可能多的设备上使用。即使 Google 没有强制执行特定的 minSdkVersion
,就像他们对 targetSdkVersion
所做的那样,但理解设置低 minSdkVersion
的影响至关重要,因为它直接影响安全性,使用户暴露于漏洞,并阻止应用利用关键的安全保护。
澄清区别:targetSdkVersion
vs minSdkVersion
¶
targetSdkVersion
:定义应用设计运行的最高 API 级别。该应用可以在较低的 API 级别上运行,但它不一定会利用所有新的安全强制措施。minSdkVersion
:定义应用允许运行的最低 API 级别。这一点至关重要,因为许多安全功能仅在运行特定 API 级别或更高版本的设备上可用。如果您设置较低的minSdkVersion
,您的应用将完全错过在旧设备上的这些保护措施。
即使您设置了较高的 targetSdkVersion
,该应用仍然可以在较旧的设备上运行,而无需最新的安全改进。如果您设置 targetSdkVersion=33
(Android 13),但 minSdkVersion=21
(Android 5),则该应用仍然可以安装在 Android 5 设备上,这些设备缺少多年的关键安全更新。这些旧设备上的恶意软件可以利用缺少安全功能的漏洞,而这些漏洞仅靠应用级别的代码无法解决,正如 Android 安全公告中列出的漏洞所证明的那样。
虽然增加 minSdkVersion
可能会略微减少您的应用可以运行的设备数量,但通过确保所有用户都具有基准级别的保护,它会显著增强安全性。
常见误解¶
关于 Android 开发中的 minSdkVersion
和 targetSdkVersion
存在许多误解。Android 文档有时会提到“目标”,但实际上是指“运行”。例如
选择退出明文流量:本节中的指导仅适用于以 Android 8.1(API 级别 27)或更低版本为目标的应用程序。从 Android 9(API 级别 28)开始,默认情况下禁用明文支持。
该说明表明该指南适用于以 API 27 或更低版本为目标的应用程序。但实际上,即使应用程序以 API 28+ 为目标,但运行在较旧的 Android 版本(低于 API 28)上,除非显式禁用,否则仍然允许明文流量。开发人员可能会认为,仅仅增加 targetSdkVersion
就会自动阻止明文,这是不正确的。
Android 平台安全性随时间推移的显著改进¶
- 2012 年 11 月的 Android 4.2(API 级别 16)(SELinux 的引入)
- 2013 年 7 月的 Android 4.3(API 级别 18)(默认启用 SELinux)
- 2013 年 10 月的 Android 4.4(API 级别 19)(引入了几个新的 API 和 ART)
- 2014 年 11 月的 Android 5.0(API 级别 21)(默认使用 ART,并添加了许多其他功能)
- 2015 年 10 月的 Android 6.0(API 级别 23)(许多新功能和改进,包括授权;运行时而不是在安装期间完全或根本不进行详细的权限设置)
- 2016 年 8 月的 Android 7.0(API 级别 24-25)(ART 上的新 JIT 编译器)
- 2017 年 8 月的 Android 8.0(API 级别 26-27)(许多安全改进)
- 2018 年 8 月的 Android 9(API 级别 28)(限制麦克风或摄像头的后台使用,引入锁定模式,所有应用程序的默认 HTTPS)
- 2019 年 9 月的 Android 10(API 级别 29)(强制执行 TLS 1.3,访问位置“仅在使用应用程序时”,设备跟踪预防,改进安全外部存储)
- 2020 年 9 月的 Android 11(API 级别 30)(范围存储强制执行,权限自动重置,减少包可见性,APK 签名方案 v4)
- 2021 年 8 月的 Android 12(API 级别 31-32)(Material You,Web intent resolution,隐私仪表板)
- 2022 年的 Android 13(API 级别 33)(更安全地导出上下文注册的接收器,新的照片选择器)
- 2023 年的 Android 14(API 级别 34)
- 2024 年的 Android 15(API 级别 35)
- 2025 年的 Android 16(API 级别 36)( BETA)
测试¶
MASTG-TEST-0253:在 WebView 中运行时使用本地文件访问 API MASTG-TEST-0252:在 WebView 中引用本地文件访问