我需要制作运行iperf3库的android应用程序,因此我使用android-ndk-r20并在其中进行了更改来编译了“ iperf3”

iperf_api.c

char buf[] = "/tmp/iperf3.XXXXXX";我已替换为char buf[] = "/data/local/tmp/iperf3.XXXXXX";,弄清楚了如何将其与我的android应用程序打包并运行。但是我不知道如何在没有“ 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”一起很好地工作,但是我需要使其在没有root的情况下工作。当我尝试相同的代码但用“ su”替换为“ sh”时,出现此错误:

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


我不知道如何使它起作用,有些应用程序在没有root权限的情况下在Google Play商店中使用iperf3,因此这是可能的。我做错了什么?

最佳答案

我弄清楚了如何使其工作。在编译“ iperf3”之前,您需要更改“ iperf_api.c”中的以下行

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


char buf[] = "/data/data/your.package.name/cache/iperf3.XXXXXX";
而且效果很好!
我希望我能帮助一个人。

09-06 03:19