【问题标题】:Android O device serial number from native来自本机的 Android O 设备序列号
【发布时间】: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


【解决方案1】:

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

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

总的来说 - 在过去的几年里,Google 似乎正在慢慢地阻止应用使用个人身份信息(如设备的序列号),因此您应该研究像 installationId 这样的替代方案。

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多