Мне нужно сделать приложение для 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 без рут-прав, так что это возможно. Что я делаю не так?