gpt4 book ai didi

android - 抛出的异常 "open failed: EROFS (Read-only file system)"

转载 作者:行者123 更新时间:2023-11-29 22:59:58 29 4
gpt4 key购买 nike

首先,我确实阅读了this post仔细了解此异常,但答案无法解释我的情况。我认为许可在这里不是问题。

代码:

Serializer serializer = new Persister();
File fFoo= new File(context.getFilesDir(), "foo.xml");
serializer.write(fooObject, fFoo);

serializer.write() 抛出以下异常偶尔:

 Stack trace: java.io.FileNotFoundException: /data/data/net.foo.appfoo/files/foo.xml: open failed: EROFS (Read-only file system)
at libcore.io.IoBridge.open(IoBridge.java:460)
at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
at org.simpleframework.xml.core.Persister.write(SourceFile:1198)

谁能指出发生这种情况的可能情况?

最佳答案

可以解释这一点的一种情况是 android:sharedUserId 中的变化.

android:sharedUserId是您可以放在 <manifest> 上的属性.如果 2+ 个应用具有相同的 sharedUserId并且由相同的签名 key 签名,他们可以在内部存储上读/写彼此的文件。

但是,如果您更改 sharedUserId出货应用程序的值(value)——包括在最初出货后没有它的情况下添加一个——现有用户将被锁定在他们的内部存储文件之外。 Android 会切换应用程序运行时使用的 Linux uid,但不会更改文件的所有权。因此,该应用程序不再拥有对其文件的权限。这是我希望在这种情况下看到的异常。

正是这类问题导致 Google 最终弃用了 android:sharedUserId在 Android Q 中,并计划在未来的版本中正式停止使用它。

在您的情况下,我猜您没有设置或更改 android:sharedUserId .


这是我所知道的唯一一种情况,您的应用程序的内部存储会被报告为只读,而您作为开发者导致了问题。

我能想到的一切都不在你的控制范围内:

  • 也许用户对他们的设备进行了 root 操作并无意中更改了您文件的文件所有权或文件权限

  • 也许用户是一个脚本小子,他正在对您的应用程序进行逆向工程并且正在忙于 android:sharedUserId

  • 可能用户中了勒索软件,部分攻击是通过一些安全漏洞更改应用文件的权限

关于android - 抛出的异常 "open failed: EROFS (Read-only file system)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066640/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com