【问题标题】:Android is disallowing execution of native library when running as system app作为系统应用程序运行时,Android 不允许执行本机库
【发布时间】:2019-08-13 00:16:33
【问题描述】:

当我使用系统证书签署我的应用程序时,我无法再使用带有自定义原生库的 SDK。 SDK 执行该本机库中的代码。当我的应用未作为系统应用签名时,一切正常,但在签名时,我收到错误消息。

错误似乎来自带有以下日志消息的 SELinux 策略:

type=1400 audit(0.0:22): avc: denied { execute } for 通讯=4173796E635461736B202331 path="/data/data/myapp/cache/librs.bitmap_to_argb.so" dev="mmcblk0p22" ino=16791 scontext=u:r:system_app:s0 tcontext=u:object_r:system_app_data_file:s0 tclass=文件许可=0

为什么我的应用无法执行位于应用内部存储中的此类库?

【问题讨论】:

    标签: android android-ndk selinux


    【解决方案1】:

    系统应用期望它们的原生库位于 /system/lib 或 lib64 目录中。如果您在应用程序清单中设置 android:extractNativeLibs="false",也许可以避免这种情况。

    【讨论】:

    • 我尝试添加它,但它没有改变任何东西。使用默认的 Android Studio 构建和运行过程,会导致“INSTALL_FAILED_INVALID_APK: Failed to extract native library, res=-2”。如果我构建了一个签名的 apk,然后用 adb 安装它,它安装得很好,但会遇到与发布的相同的错误。
    • APK 无效?诚然,并非所有 Android 版本都支持 android:extractNativeLibs="false"。这就是我写“也许”的原因。
    • 如果这个应用应该进入/system/priv-app,尝试手动复制原生库到/system/priv-app/your-app-name/lib
    • 它不是一个priv-app,只是用系统证书签名的。我现在能想到的唯一解决方案是更新操作系统的 SELinux 策略,就像在这个线程中一样:stackoverflow.com/a/47043397/2565692
    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2017-09-10
    • 2013-12-09
    相关资源
    最近更新 更多