【发布时间】:2018-01-04 11:25:12
【问题描述】:
在不调用 Java Build.getSerial() 的情况下,在 Android O 上从本机获取序列号的正确方法是什么。
在 Android
string serial = read_property("ro.boot.serialno");
...
string read_property(const string& property_name) {
char propertyValue[PROP_VALUE_MAX];
int propertyLen = __system_property_get(property_name.c_str(), propertyValue);
...
}
在 Android O 上,这会引发错误:
Access denied finding property "ro.boot.serialno"
虽然授予了READ_PHONE_STATE 权限。似乎与 Android 26 中已弃用的 Build.SERIAL 有关。
我设法使用adb 获取了此属性,因此该值没有被删除并且存在:
adb shell getprop ro.boot.serialno
【问题讨论】:
-
“访问被拒绝”说明了一切,构建序列在 Android O 上不再适用于应用程序(adb shell 不是应用程序)。即使它可以通过某种方式访问,您也不应该使用它,因为访问被拒绝以保护 Android 用户的隐私。如果您发现漏洞,Google 可能会稍后将其关闭,因此最好找到另一种方法来做您想做的事情。
标签: java android c++ native android-8.0-oreo