Изменить права доступа к файлам в 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
}