来自原生的Android O设备序列号

时间:2017-07-28 11:45:29

标签: java android c++ native android-8.0-oreo

在不调用Java Build.getSerial()的情况下,从Android O上获取本机序列号的正确方法是什么。

在Android上<来自本机的26个版本我们可以使用以下代码获取设备序列号:

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

1 个答案:

答案 0 :(得分:0)

您可以使用Build.getSerial()获取序列号。

如果用户已授予READ_PHONE_STATE权限,则没有问题,但是如果用户已撤消该权限或从未授予该权限,则应考虑到在尝试检索它时将在运行时获得SecurityException。

总体而言-过去几年来,Google似乎在努力阻止应用程序使用个人身份信息(例如设备的序列号),因此您应该考虑安装ID之类的替代方法。