AOSP: записать файл в каталог / data - PullRequest
0 голосов
/ 07 мая 2020

Я хочу записать файл в каталог «/ data». Я внедрил свое устройство и установил setenforce 0. Однако я получаю:

W / System.err: java .io.FileNotFoundException: data / MyDoople.txt (Permission denied)

Вот мой код (он работает для sdcard):

String filename= "MyDoople.txt";
try
{
    File f = new File("data/"+File.separator+filename);

    FileOutputStream fOut = new FileOutputStream(f);
    OutputStreamWriter myOutWriter = new OutputStreamWriter(
            fOut);
    myOutWriter.append("Mytest");
    myOutWriter.close();
    fOut.close();
}
catch(Exception e)
{
    e.printStackTrace();
}

Нужно ли мне добавлять какие-либо политики, чтобы он работал?

1 Ответ

1 голос
/ 07 мая 2020

Поскольку разрешение каталога данных - rwxrwx - x, пользовательская система, групповая система и запущенный пользователь вашего приложения является обычным пользователем, а не системным пользователем, поэтому приложение не может читать и записывать / data каталог напрямую.

Можно сослаться на два способа:

1: если у вас есть сертификат платформы, объявите android: sharedUserId = "android .uid.system" в AndroidManifest. xml и используйте сертификат платформы, чтобы повторно подписать приложение. Таким образом, пользователь, запускающий ваше приложение, является системным пользователем, у которого есть разрешения на чтение и запись в разделе / ​​data.

2: получите разрешение root в приложении, а затем выполните соответствующую команду см .:

    public static boolean RootCommand(String command) {
    Process process = null;
    DataOutputStream os = null;
    try {
        process = Runtime.getRuntime().exec("su");
        os = new DataOutputStream(process.getOutputStream());
        os.writeBytes(command + "\n");
        os.writeBytes("exit\n");
        os.flush();
        process.waitFor();
    } catch (Exception e) {
        Log.d("*** DEBUG ***", "ROOT REE" + e.getMessage());
        return false;
    } finally {
        try {
            if (os != null) {
                os.close();
            }
            process.destroy();
        } catch (Exception e) {
        }
    }
    Log.d("*** DEBUG ***", "Root SUC ");
    return true;
}
...