Security State:检查系统安全补丁 · AndroidX 源码指南
AAndroidX 源码指南
安全
安全 · androidx.security

Security State:检查系统安全补丁1.1.0-rc01

获取系统/厂商安全补丁级别与 WebView 包信息,用于安全敏感功能的前置判断。

最后更新 2026-08-01

复制即用

import android.os.Bundle
import androidx.security.state.SecurityStateManagerCompat

val manager = SecurityStateManagerCompat(context)
val state: Bundle = manager.getGlobalSecurityState()

val systemSpl = state.getString(
    SecurityStateManagerCompat.KEY_SYSTEM_SPL,
) // "YYYY-MM-DD"
val vendorSpl = state.getString(
    SecurityStateManagerCompat.KEY_VENDOR_SPL,
)

Bundle 里的完整字段

Key类型含义
KEY_SYSTEM_SPLString系统安全补丁级别(YYYY-MM-DD)
KEY_VENDOR_SPLString厂商安全补丁级别
KEY_KERNEL_VERSIONString内核版本(X.X.XX)
KEY_SYSTEM_SUPPLEMENTAL_PATCHESString[]系统补充 CVE 列表
KEY_VENDOR_SUPPLEMENTAL_PATCHESString[]厂商补充 CVE 列表
WebView 包名StringSDK 26+ 时加入当前 WebView 包的版本号

平台版本差异

  • SDK < 35:手动从 Build.VERSION.SECURITY_PATCHro.vendor.build.security_patch(反射 SystemProperties)等属性拼装;补充补丁从 /system/etc/security/supplemental_security_patches.xml/vendor/etc/security/...xml 等配置文件解析。
  • SDK 35/36(BAKLAVA):从 android.os.SecurityStateManager 系统服务取 Bundle,补充补丁仍手动加载。
  • SDK > 36:系统服务返回全部,无需手动补充。

补丁级别比较(安全敏感功能前置判断)

import java.time.LocalDate

fun isSecurityPatchOutdated(
    state: Bundle,
    minimumDate: String, // "2025-01-01"
): Boolean {
    val systemSpl = state.getString(
        SecurityStateManagerCompat.KEY_SYSTEM_SPL,
    ) ?: return true // 无法获取视为过旧
    val patchDate = try {
        LocalDate.parse(systemSpl)
    } catch (e: Exception) {
        return true
    }
    return patchDate.isBefore(LocalDate.parse(minimumDate))
}

常见陷阱

  • Bundle 字段可能缺失:个别设备厂商不提供 vendor SPL,取不到要降级处理。
  • SDK < 23Build.VERSION.SECURITY_PATCH 不可用(源码 getSecurityPatchLevelSafe 返回空)。
  • 反射获取 vendor SPL:SDK 35 以下用 SystemProperties 反射,失败返回空串。
  • 比较用日期字符串:直接字典序比较 “YYYY-MM-DD” 格式恰好可用,但建议 LocalDate.parse

要点

  • getGlobalSecurityState() 返回 Bundle,用 KEY_SYSTEM_SPLKEY_VENDOR_SPL 取安全补丁级别,KEY_SYSTEM_SUPPLEMENTAL_PATCHES / KEY_VENDOR_SUPPLEMENTAL_PATCHES 取补充 CVE 列表。
  • 适合安全敏感功能(支付、身份验证)的前置检查:补丁过旧时给出提示或降级。
  • SDK 35+ 走系统服务 SecurityStateManager;更旧版本手动拼装(含反射)。
  • 该库是新 API(1.1.0-beta02),具体字段和常量以当前源码 SecurityStateManagerCompat.kt 为准。

相关页面