来自本机的 Android O 设备序列号

pir*_*ags 5 c++ java android native android-8.0-oreo

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

在 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);
  ...
}
Run Code Online (Sandbox Code Playgroud)

在 Android O 上,这会引发错误:

Access denied finding property "ro.boot.serialno"
Run Code Online (Sandbox Code Playgroud)

虽然READ_PHONE_STATE获得了许可。Build.SERIAL似乎与Android 26 中已弃用的内容有关。

我设法使用 获取此属性adb,因此该值不会被删除并且存在:

adb shell getprop ro.boot.serialno
Run Code Online (Sandbox Code Playgroud)

Fun*_*her 0

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

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

总的来说 - 看起来谷歌在过去几年里正在慢慢推动阻止应用程序使用个人身份信息(例如设备序列号),因此您应该考虑诸如installationId之类的替代方案。