故障排除 - Java SDK
Atlas Device SDK 已弃用。 有关详细信息,请参阅弃用页面。
在自定义 Android ROM 上的系统应用中使用
Atlas Device SDK 使用命名管道来支持通知以及从多个进程访问权限Realm 文件。 虽然普通用户应用程序默认允许这样做,但系统应用程序不允许这样做。
系统应用是通过在 Android 清单中设置 android:sharedUserId="android.uid.system"
来定义的。 对于系统应用,您可能会在 Logcat 中看到如下所示的安全违规:
05-24 14:08:08.984 6921 6921 W .realmsystemapp: type=1400 audit(0.0:99): avc: denied { write } for name="realm.testapp.com.realmsystemapp-Bfqpnjj4mUvxWtfMcOXBCA==" dev="vdc" ino=14660 scontext=u:r:system_app:s0 tcontext=u:object_r:apk_data_file:s0 tclass=dir permissive=0 05-24 14:08:08.984 6921 6921 W .realmsystemapp: type=1400 audit(0.0:100): avc: denied { write } for name="realm.testapp.com.realmsystemapp-Bfqpnjj4mUvxWtfMcOXBCA==" dev="vdc" ino=14660 scontext=u:r:system_app:s0 tcontext=u:object_r:apk_data_file:s0 tclass=dir permissive=0
要解决此问题,您需要调整 ROM 中的 SELinux 安全规则。这可以通过使用工具audit2allow
来完成。此工具作为 AOSP 的一部分提供。
从设备中拉取当前策略:
adb pull /sys/fs/selinux/policy
。将 SELinux 错误复制到名为
input.txt
的文本文件中。运行
audit2allow
工具:audit2allow -p policy -i input.txt
。该工具应输出一条规则,您可以将其添加到现有策略中。 该规则允许您从多个进程访问 Realm 文件。
audit2allow
在编译 AOSP/ROM 时生成,并且只能在 Linux 上运行。 查看 Android 源文档 中的详细信息 。另请注意,自 Android Oreo 以来,Google 改变了配置 SELinux 的方式,默认安全策略现在更加模块化。 更多详细信息,请参阅 Android 源文档。