美文网首页
Unrecoverable error. Permission

Unrecoverable error. Permission

作者: cfryan1990 | 来源:发表于2017-11-29 20:07 被阅读42次

    这是一个在使用realm-java数据库时出现的问题,常见于华为的部分手机,以下是官方项目下的issue
    realm-issues

    如何复现

    官方的演示
    总结下来就是在部分手机不删除数据情况下恢复出厂设置或者进行OTA升级之后,系统会对安装的app重新分配uid,但是这时候有些文件却没有分配成功,用的还是老的uid,这里realm使用的fifo文件在这些手机中就会出现。uid不同就会导致我们在访问这个文件的时候缺少权限,官方开发人员也给出了fifo文件的操作示例:
    https://github.com/beeender/HuaweiFifoTest
    这里我们可以自己去操作,手动修改自己项目中uid,触发这个bug,当然前提需要root,并且装了RE管理器,然后找到项目的realm文件->更改所有者(所有者 UID,用户组 GID),把UID改成其他的之后,需要覆盖安装一次App,然后在第一次调用Realm.getDefaultInstance()时候会触发。

    411511955890_.pic.jpg

    解决方法

    我们可以在初始化完realm之后,主动去调用一次Realm.getDefaultInstance(),通过捕获这两个异常来重建realm数据库。

    image.png

    在issue下,官方其实并没有给出最合适的解决方法,有开发人员使用了
    ((ActivityManager)context.getSystemService(ACTIVITY_SERVICE)) .clearApplicationUserData();
    但对于我们某些业务繁重的App来说,这样直接清空用户所有数据的操作显然不妥,但也有人员提出Realm.deleteRealm(configuration),其实没有权限去删除出问题的数据库,但经过我这边的测试并没有发现问题。。。后续再看bug率有没有下滑吧。

    相关文章

      网友评论

          本文标题:Unrecoverable error. Permission

          本文链接:https://www.haomeiwen.com/subject/bxesbxtx.html