【问题标题】:Access ro.serialno from native in Android 8?在 Android 8 中从本机访问 ro.serialno?
【发布时间】:2018-03-31 05:11:21
【问题描述】:

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

有什么帮助吗?

【问题讨论】:

    标签: android c permissions native


    【解决方案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;
    

    【讨论】:

    • 你在哪里粘贴这个??
    【解决方案2】:

    如果您掌握 AOSP:

    1. android:sharedUserId="android.uid.system" 转为AdnroidMainfest
    2. 运行类似system_app 的应用程序。
    3. 更改Android.mkLOCAL_MODULE_PATH := $(TARGET_OUT)/app

    或者您可以复制该属性。

    【讨论】:

      【解决方案3】:

      我认为你没有在 UI 线程上调用它,所以出现了这个错误。

      如果你在非ui线程上调用它,你应该首先创建opengl上下文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 2011-07-06
        • 2011-03-22
        • 2016-01-10
        • 1970-01-01
        • 2017-05-02
        相关资源
        最近更新 更多