从Android 8中的本机访问ro.serialno?

car*_*ris 5 c permissions android native

我需要一些帮助.我有一个主要用本机C代码编写的应用程序.我用这个__system_property_get(const char * name, char * value)方法来读取序列号.我的本机代码中各个点的设备.使用Android 8,我现在总是收到"拒绝访问"消息.
libc:访问被拒绝查找属性"ro.serialno"
有没有办法让我仍然能够读取序列号.在Android 8?我尝试切换到targetSDKversion <26但它仍然给我一个"拒绝访问"的消息.如果我使用Java Build.SERIAL(不管SDK版本),我会得到正确的值,Build.getSerial()如果我授予READ_PHONE_STATE权限,我会在SDK版本26中得到正确的值.但我无法在Java中读取这些值并将它们传递给本机代码,而无需重写本机代码.

有帮助吗?

小智 4

我也遇到了这个问题。最后我找到了问题的根本原因。在Android O中,SELinux在系统属性上设置了很多限制。在这种情况下,除了白名单中的某些域之外,有一个永远不允许限制读取序列号。

有关更具体的信息,您可以阅读以下代码system/sepolicy/public/domain.te

neverallow {
  domain
  -adbd
  -dumpstate
  -hal_drm
  -init
  -mediadrmserver
  -recovery
  -shell
  -system_server
} serialno_prop:file r_file_perms;
Run Code Online (Sandbox Code Playgroud)