2017-10-19 37 views
3

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

任何帮助?

回答

1

我也遇到了这个问题。最后我找到了问题的根源。在Android O中,SELinux在系统属性中设置了很多限制。在这种情况下,有一个neverallow限制除白名单中的某个域的读取序列号。

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

neverallow { 
    domain 
    -adbd 
    -dumpstate 
    -hal_drm 
    -init 
    -mediadrmserver 
    -recovery 
    -shell 
    -system_server 
} serialno_prop:file r_file_perms; 
+0

非常感谢您! – carlaharris