如何确定 Android 设备的安全补丁级别?

How to determine the Security Patch Level of an Android device?

如何使用 API 或其他机制确定 Android 设备的安全补丁级别?我正在寻找可以通过单击设备上的 Settings -> About 菜单手动找到的相同安全补丁信息。

Google每月发布安全补丁,例如2016-12-01.

我认为没有 root 访问权限是不可能的,因为安全补丁级别存储在 /system/ 路径中 build.prop 内的 ro.build.version.security_patch 字段中。

如果您有 root 访问权限,您可以只读取该文件并查找上述字段。

编辑:如@v6ak 所述,您也可以在没有 root 的情况下访问 properly 的值。

在 Android SDK 23 (Marshmallow) 及更高版本中,您可以从 android.os.Build.VERSION.SECURITY_PATCH 检索安全补丁日期。日期是 YYYY-MM-DD 格式的字符串值。

在Lollipop中,可以使用getprop命令读取ro.build.version.security_patch的值。请参阅此 了解如何使用 ProcessBuilder 执行 getprop

自 2015 年 10 月以来每月发布安全补丁,请参阅Android Security Bulletins了解更多详情。

您可以从 adb shell 执行 getprop ro.build.version.security_patch。 希望这些属性可用于 Android.

上的非根进程

所以在 C/C++ 中我会尝试使用: 系统("getprop ro.build.version.security_patch");

或者在 Java 中是这样的:

import android.os.Bundle;
public static final String SECURITY_PATCH = SystemProperties.get(
            "ro.build.version.security_patch");

这个值存储在/system/bin/getprop系统文件中。你可以这样阅读:

try {
    Process process = new ProcessBuilder()
            .command("/system/bin/getprop")
            .redirectErrorStream(true)
            .start();

    InputStream is = process.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line;

    while ((line = br.readLine()) != null) {
        str += line + "\n";
        if (str.contains("security_patch")) {
            String[] splitted = line.split(":");
            if (splitted.length == 2) {
                return splitted[1];
            }
            break;
        }
    }

    br.close();
    process.destroy();

} catch (IOException e) {
    e.printStackTrace();
}

你也可以使用下面的adb命令

adb shell getprop | egrep