Я занимаюсь разработкой небольшого приложения, которое должно читать содержимое защищенной папки, поэтому я пришел к выводу, что мне пришлось использовать su в сочетании с ls и inputsream.
Однако, когда функция readLine достигает конца вывода, она просто зависает. Я предполагаю, что это потому, что в последней строке нет знака EOL ...
Код:
p = Runtime.getRuntime().exec("su");
outputS = new DataOutputStream(p.getOutputStream());
inputS = new DataInputStream(p.getInputStream());
errorS = new DataInputStream(p.getErrorStream());
outputS.writeBytes("ls /datadata" + "\n");
outputS.flush();
while((s = inputS.readLine()) != null)
{
Log.i("DS", s);
}
Log.i("DS", "done");
Как я могу обойти это? Я попытался прочитать символы, а затем просто ждать -1, но это не сработало, то же самое, что и выше. В идеале я бы делал это без системных вызовов, но Android, к сожалению, не позволяет мне перечислять или копировать содержимое этой папки ...
Спасибо, что прочитали это,
Квинт
РЕДАКТИРОВАТЬ: Благодаря приведенному ниже ответу я решил свою проблему, что бы вы ни делали, просто убедитесь, что вы завершили задачу "su" так же, как и при использовании оболочки adb. Вы можете использовать метод, описанный в принятом ответе, или вручную запустить «выход» после того, как вы сделали все, что вам нужно было сделать. Запуск exit генерирует две пустые строки в потоке ошибок по неизвестным мне причинам.