IPerf3 for Android 7

姚和顺
2023-12-01

在IPerf的官网上有IPerf3对应的Android 版本可以下载(https://iperf.fr/iperf-download.php),是在Google的源代码库中,但Google被天朝伟大的Great Firewall of China给屏蔽了,不如自己动手编译一个试试。

以下是翻译:———————————————————————

https://stackoverflow.com/questions/40975003/iperf3-execution-from-android-7-doesnt-work

如果你正在使用ubuntu软件库中的构建工具链,那么构建出的二进制可执行文件在Android 7.0上将无效,因为那是那是一个老版本的构建链,你需要使用新版本的NDK(现在是版本是r13B)来构建二进制文件。

我是如何解决这个问题的:

  1. 将iperf3源码放入jni文件夹
  2. 创建Android.mk和Application.mk(我将在下面贴出来),并和其他文件放入同一个文件夹
  3. 进入jni文件夹,运行命令“ndk-build”,可以看到,所有的二进制文件都生成在/libs文件下,它们在Android 7.0上是有效。(选择二进制文件,放入assets文件夹下,导入对应ABI的二进制文件实现你的策略,或者直接获取armabi的二进制文件,然后导入你的app )

注意 :iperf3使用了一个Android不能访问的文件夹来缓存结果。你需要改变这个文件使iperf3正常工作。请参考https://github.com/esnet/iperf/blob/670c18584bcf7a285f3561eb7ea38cc53600d0ab/src/iperf_api.c#L2621

Android.mk

我认为在这个脚本中引入.h文件是没有必要的。

http://pastebin.com/fPsn0wsD

LOCAL_PATH := $(call my-dir)  

include $(CLEAR_VARS)  

LOCAL_CFLAGS += -fPIE  
LOCAL_LDFLAGS += -fPIE -pie  

LOCAL_MODULE := iperf3  
LOCAL_SRC_FILES :=                         cjson.c \  
                                           cjson.h \  
                                           flowlabel.h \  
                                           iperf.h \  
                                           iperf_api.c \  
                                           iperf_api.h \  
                                           iperf_error.c \  
                                           iperf_client_api.c \  
                                           iperf_locale.c \  
                                           iperf_locale.h \  
                                           iperf_server_api.c \  
                                           iperf_tcp.c \  
                                           iperf_tcp.h \  
                                           iperf_udp.c \  
                                           iperf_udp.h \  
                                           iperf_sctp.c \  
                                           iperf_sctp.h \  
                                           iperf_util.c \  
                                           iperf_util.h \  
                                           main.c \  
                                           net.c \  
                                           net.h \  
                                           portable_endian.h \  
                                           queue.h \  
                                           tcp_info.c \  
                                           tcp_window_size.c \  
                                           tcp_window_size.h \  
                                           timer.c \  
                                           timer.h \  
                                           units.c \  
                                           units.h \  
                                           version.h  

include $(BUILD_EXECUTABLE)  

Application.mk

http://pastebin.com/sgSsGNqB

APP_ABI := all  
APP_PLATAFORM := android-16  

我认为使用ndk-build为不同架构平台构建iperf3更加容易,例如x86架构

翻译结束————————————————————————-

说明几点:

  1. Android.mk中确实没必要引入头文件,因为ndk-build会自动去搜索
  2. Application.mk中的APP_ABI := all 是表示要编译生成当前NDK版本所支持的所有平台(ABI信息库文件),可参考 (https://blog.csdn.net/qq_31387043/article/details/50899589)
 类似资料:

相关阅读

相关文章

相关问答