欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IPerf3 for Android 7

程序员文章站 2024-02-26 23:20:16
...

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

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

https://*.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)
相关标签: Android.mk