我需要制作运行iperf3库的android应用程序,因此我使用android-ndk-r20并在其中进行了更改来编译了“ iperf3”
iperf_api.cchar 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";
而且效果很好!
我希望我能帮助一个人。