Не могу запустить iperf3 на Android без прав root - PullRequest
1 голос
/ 26 октября 2019

Мне нужно сделать приложение для Android, которое запускает библиотеку iperf3, поэтому я скомпилировал «iperf3» с помощью android-ndk-r20 с изменениями, сделанными в

iperf_api.c

char buf[] = "/tmp/iperf3.XXXXXX"; Iзаменил на char buf[] = "/data/local/tmp/iperf3.XXXXXX";, разобрался как упаковать с моим андроид-приложением и запустить. Но я не знаю, как запустить его без «su» (root) разрешений.

Хорошо работающий код:

ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("su");
commandLine.add("-c");
commandLine.add(getApplicationContext().getApplicationInfo().nativeLibraryDir+"/libiperf3.so -c speedtest.hostkey.ru -t 10 -i 5 -P 3 -d");
Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));

Хорошо работает с "su", но мне нужнозаставил работать без рута. Когда я пытаюсь использовать тот же код, но с «su», замененным на «sh», я получаю эту ошибку:

iperf3: error - unable to create a new stream: Permission denied

Я не знаю, как заставить это работать, есть некоторые приложения, которые используют iperf3 в GooglePlay Store без рут-прав, так что это возможно. Что я делаю не так?

1 Ответ

1 голос
/ 27 октября 2019

Я понял, как заставить это работать. Перед компиляцией «iperf3» вам нужно изменить следующую строку в «iperf_api.c»

char buf[] = "/tmp/iperf3.XXXXXX";

на char buf[] = "/data/data/your.package.name/cache/iperf3.XXXXXX"; И это прекрасно работает! Надеюсь, я кому-то помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...