跳过内容

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 开发中的 minSdkVersiontargetSdkVersion 存在许多误解。Android 文档有时会提到“目标”,但实际上是指“运行”。例如

选择退出明文流量:本节中的指导仅适用于以 Android 8.1(API 级别 27)或更低版本为目标的应用程序。从 Android 9(API 级别 28)开始,默认情况下禁用明文支持。

该说明表明该指南适用于以 API 27 或更低版本为目标的应用程序。但实际上,即使应用程序以 API 28+ 为目标,但运行在较旧的 Android 版本(低于 API 28)上,除非显式禁用,否则仍然允许明文流量。开发人员可能会认为,仅仅增加 targetSdkVersion 就会自动阻止明文,这是不正确的。

Android 平台安全性随时间推移的显著改进

测试

MASTG-TEST-0253:在 WebView 中运行时使用本地文件访问 API MASTG-TEST-0252:在 WebView 中引用本地文件访问