Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/

故障排除 - Kotlin SDK

在此页面上

  • iOS/iPad OS 分配错误/可用内存不足
  • 在自定义 Android ROM 上的系统应用中使用

在可用内存很少的 iOS 或 iPad 设备中,或者使用多个 Realm 或许多通知的内存密集型应用程序中,您可能会遇到以下错误:

libc++abi: terminating due to an uncaught exception of type std::bad_alloc: std::bad_alloc

该错误通常表示由于可用内存不足而无法分配资源。

如果您正在针对 iOS15 + 或 iPad15 + 进行构建,则可以添加 扩展虚拟寻址权利 以解决此问题。

将这些键添加到属性列表中,并将值设置为 true

<key>com.apple.developer.kernel.extended-virtual-addressing</key>
<true/>
<key>com.apple.developer.kernel.increased-memory-limit</key>
<true/>

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 的一部分提供。

  1. 从设备中拉取当前策略: adb pull /sys/fs/selinux/policy

  2. 将 SELinux 错误复制到名为input.txt的文本文件中。

  3. 运行audit2allow工具: audit2allow -p policy -i input.txt

  4. 该工具应输出一条规则,您可以将其添加到现有策略中。 该规则允许您从多个进程访问 Realm 文件。

audit2allow 在编译 AOSP/ROM 时生成,并且只能在 Linux 上运行。 查看 Android 源文档 中的详细信息 。另请注意,自 Android Oreo 以来,Google 改变了配置 SELinux 的方式,默认安全策略现在更加模块化。 更多详细信息,请参阅 Android 源文档。

后退

日志记录