我需要制作運(yùn)行 iperf3 庫(kù)的 android 應(yīng)用程序,因此我使用 android-ndk-r20 編譯了“iperf3”,并進(jìn)行了更改iperf_api.cchar buf[] = "/tmp/iperf3.XXXXXX";我已經(jīng)替換為char buf[] = "/data/local/tmp/iperf3.XXXXXX";,弄清楚如何將其與我的 Android 應(yīng)用程序打包并運(yùn)行。但我不知道如何在沒(méi)有“su”(root)權(quán)限的情況下運(yùn)行它。運(yùn)行良好的代碼: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”配合得很好,但我需要讓它在沒(méi)有 root 的情況下工作。當(dāng)我嘗試相同的代碼但將“su”替換為“sh”時(shí),我收到此錯(cuò)誤:iperf3: error - unable to create a new stream: Permission denied我不知道如何讓它工作,Google Play 商店中有一些應(yīng)用程序在沒(méi)有 root 權(quán)限的情況下使用 iperf3,所以這是可能的。我做錯(cuò)了什么?
2 回答

慕無(wú)忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
我想出了如何讓它發(fā)揮作用。在編譯“iperf3”之前,您需要更改“iperf_api.c”中的以下行
char buf[] = "/tmp/iperf3.XXXXXX";
到char buf[] = "/data/data/your.package.name/cache/iperf3.XXXXXX";
并且效果很好!我希望我?guī)椭四橙恕?/p>

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)您將以下任何環(huán)境變量設(shè)置為可寫目錄(即cacheDir)時(shí),它也可以工作:TMPDIR
或TEMP
或TMP
例如: Os.setenv("TEMP", CACHE_DIR, true)
在函數(shù)中檢查臨時(shí)目錄iperf_api.c
iperf_new_stream
。
添加回答
舉報(bào)
0/150
提交
取消