我正在开发一个应用程序,该应用程序需要来自/data
文件夹中某些文件的数据(主要是/data/system_ce/0
,但也有一些其他文件夹(。
该应用程序应该是一个系统应用程序。我用平台密钥对.apk
文件进行了签名,并将其移动到/system/priv-app
(也用/system/app
尝试过(文件夹中。
但是,当我尝试读取权限rw-------
(即 600(的文件时,我收到一个FileNotFoundException
,说"Permission denied"
。 文件的所有者是"系统"。 为什么我无法读取文件?除了从我的应用程序更改文件权限之外,还可以执行哪些操作?
我目前的安卓版本是Oreo (8.1)
。我不关心向后兼容性。
权限为 600 意味着只有文件所有者才能读取/写入文件。应用可能不是文件的所有者。在这种情况下,您可以执行以下操作之一:
1( 让您的应用程序获得 root 权限,例如:
public void onCreate ()
{
// ...
try
{
Runtime.getRuntime ().exec ("su");
} catch (Exception e)
{
// Failed to obtain root privileges...
}
当您的应用执行该代码时,您可以在用于根管理的任何应用中授予根权限(例如,在 Magisk 管理器中(。
或
2( 将文件权限更改为全局可读/可写。
或
3( 将文件的所有权更改为应用程序的所有者。
此外,请确保您的应用程序确实作为系统应用程序运行(查看其 Android 设置:如果它显示"卸载"按钮,则它不是作为系统应用程序运行(。
其中之一应该有效。