How to determine the Security Patch Level of an Android device?
This value is stored in the /system/bin/getprop
system file. You can read it in this way:
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();
}
From an adb shell you can execute getprop ro.build.version.security_patch. Hopefully those properties are available to a non-root process on Android.
So in C/C++ I'd try using: system("getprop ro.build.version.security_patch");
Or in Java something like:
import android.os.Bundle;
public static final String SECURITY_PATCH = SystemProperties.get(
"ro.build.version.security_patch");
In Android SDK 23 (Marshmallow) and later, you can retrieve the security patch date from android.os.Build.VERSION.SECURITY_PATCH. The date is a string value in YYYY-MM-DD form.
In Lollipop, you can use the getprop command to read the value of ro.build.version.security_patch. See this S/O question for how to execute getprop using ProcessBuilder.
Security patches have been released on a monthly basis since October 2015, see Android Security Bulletins for more details.
I do not think that is possible without root access since the Security Patch Level is stored in ro.build.version.security_patch
field inside build.prop which is in /system/
path.
If you have root access, you can just read that file and look for the above mentioned field.
EDIT: as @v6ak mentioned, you access the value of the properly without root too.