Изменить права доступа к файлам в Android из кода не работает

Некоторое время назад я создал приложение с личными общими настройками. Сейчас я создаю связанное приложение, которое должно проверить некоторые из предыдущих настроек приложения. Проблема, с которой я сталкиваюсь, заключается в том, что предыдущий исходный код приложения находится на компьютере, к которому я не могу получить доступ до следующего месяца. Поскольку я не хочу ждать так долго, я подумал, что, поскольку мое устройство рутировано, я мог бы изменить разрешения файла настроек, чтобы иметь к нему доступ, чтобы я мог публиковать оба приложения, как только получу предыдущее приложение. код обратно.

Файл настроек находится в /data/data/my.package/shared_prefs. Если я обращаюсь к нему с помощью оболочки adb и использую chmod 777, права доступа к файлам изменяются, и я могу получить доступ к настройкам, но в конечном итоге разрешения вернутся к 660. Я попытался изменить их из кода, используя:

Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("chmod 777 /data/data/my.package/shared_prefs/my_preferences.xml");

Разрешения не изменены. Это почему?

Спасибо!

2 ответа

Я думаю, каждая команда запускается из exec() выполняется в отдельном родном процессе. Поэтому ваш su команда не влияет на второй вызов exec(),

Попробуйте это вместо этого:

Runtime.getRuntime().exec("su; chmod 777 /data/data/my.package/shared_prefs/my_preferences.xml");
try {
    Process suProcess = Runtime.getRuntime().exec("su");
    DataOutputStream suOutputStream = new DataOutputStream(suProcess.getOutputStream());
    suOutputStream
            .writeBytes("chmod 777 /data/data/my.package/shared_prefs/my_preferences.xml\n");
    suOutputStream.flush();
    suOutputStream.writeBytes("exit\n");
    suOutputStream.flush();
    suProcess.waitFor();

} catch (IOException e) {
    // TODO Auto-generated catch block
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
}
Другие вопросы по тегам