Termux заявляет, что он не работает как традиционный Linux bash, так как он устанавливает свою собственную среду виртуального выхода при первой настройке в своем каталоге данных в /data/data/com.termux/files/usr, см. [116 ] здесь и здесь Кроме того, в соответствии с официальными документами по Android , методом exec(command)
,
Выполняет указанную строковую команду в отдельный процесс.
Это удобный метод. Вызов формы exec (команда) ведет себя точно так же, как и вызов exec (команда, ноль, ноль).
blockquote>Так что, если это отдельный процесс, при выполнении команды он будет запускаться внутри каталога этого процесса (каждый процесс в Linux получает свой каталог и получает PID, который использует os). Так что команда
ls
дает вам просто то, что находится внутри каталога этого процесса. Вы должны быть где-то вроде/proc/31415/
, и есть только файлacct
(cgroup в обычном Linux).Что вы должны сделать, это запустить команду внутри каталога, объявив ее при вызове getRuntime (). Exec (), чтобы найти нужную вам нужную ссылку, перейдите по ссылке выше. Я бы предложил использовать переопределение, которое обрабатывает все параметры. Вам понадобится что-то вроде этого:
String[] cmd = {"mkdir", "testDir"}; File env = new File(getFilesDir().getAbsolutePath()); Runtime.getRuntime().exec(cmd, null, env);
Кроме того, не помешает взглянуть на установочный код Termux (exec (). Это даст вам хороший результат). пропустите настройку среды и работу с основными командами.
Кроме того, я думаю, что вы уже сделали это, но дважды проверьте, чтобы убедиться, что вы запрашиваете
WRITE_EXTERNAL_STORAGE
разрешение для вашего приложения. [ 1116]
Найденный решением: просто необходимо обнародовать метод насмешки (исходный метод может остаться в своей исходной видимости).
Я не знаю, почему это работает, в то время как исходный путь не делает (кто-то, кто делает больше, чем приветствие для вмешиваний), но все, что необходимо сделать, просто изменить ложный класс в примере выше к:
public class MockParent {
public static String method() {
return "MOCK";
}
}