位置:上海博为峰软件测试培训 > 学校动态 > Android NDK离线FPS获取方法
fps获取方法思考
一、FPS获取方法
当前android获取FPS的方法有几种,但大部分使用的原理都是基于dumpsys SurfaceFlinger –latency
使用python和shell脚本实现自动化解析,根据一定的方法可以计算出实时FPS,但缺点是测试过程中要一直连着USB。
另外,如果通过APK内部执行adb命令,需要手机有root权限或者APK有系统签名,也无法做到通用。
shell脚本也可以实现在android后台运行,但是因为涉及到数据处理,需要使用到awk编程,而android没有awk,因此需要手机root并通过busybox实现。脚本见附录1
参考市面上GameBench等应用获取方式,实现无需USB连接、无需设备root和apk签名就可以实时获取到当前测试应用的实时FPS。
1)首先看一篇文章 GameBench FPS获取猜想。
2)另外网络上还有 快否科技 发布的一个获取实时帧率的APK,详见github地址 或。
发现有这几种实现方式都有个相同点,就是有一个没有扩展名(如frametracer文件,二进制文文件打开都是乱码,后续都称daemon)的文件,并且都使用了如下命令push到手机的/data/local/tmp目录,然后执行,之后APK才能获取到数据:
adb push daemon /data/local/tmpadb shell chmod 777 /data/local/tmp/daemonadb shell "./data/local/tmp/daemon & "二、NDK编译文件并执行1、 准备工具和开发环境1) 安装Linux系统,如Unbuntu2) 下载Android NDK工具并解压到一个目录
3) 配置NDK环境
gedit ~/.bashrc
export NDKPATH=/usr/ndk/android-ndk-r21b //你的实际NDK目录
export PATH=$ NDKPATH:$PATH
source ~/.bashrc
配置完后输 ndk-build,有输出说明配置成功:
4) C++编译库更新 sduo apt-get g++
2、 Linux下编译C和C++代码并执行
1) linux下编译C和C++代码并执行
#include
int main(){
printf(“hello World!!!”);
return 0;
}
3、编译命令
1) 访问google,获取到的编译命令如下:
实际编译代码:
特别注意Linux系统是32位的还是64的,linux-x86_64代表的是64位的,如果是32位的则修改为,查看系统位数的命令为:uname –a,如下是32位的系统,建议都直接下载64位的系统,使用过程中32位的系统编译有问题
编译脚本命令:
$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang -o hello hello.c
上面的目录只支持C代码编译,不支持C++代表编译,如果将hello.c改成hello.cpp,则需要更改编译脚本为,特别注意-static-libstdc++:
$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ -static-libstdc++ -o hello hello.c
2)使用NDK编译一个Hello World测试
#include
int main(){
printf(“hello World!!!”);
return 0;
}
先在Linux系统上编译通过,可以发现错误,然后再使用NDK编译
按照如下步骤操作:
a. 将hello2文件push到手机的/data/local/tmp/
b. 给hello2文件777权限,chmod 777 hello
c. 执行hello2文件,./hello2
d. 可以看到如下截图,则表示执行成功
三、domean文件的实现思路
上面的步骤中,我们实现了使用NDK编译android可以执行的二进制文件并成功执行,下一步的计划就是获取dumpsys的数据,然后进行解析获取fps的数据,然后使用socket的方式,与apk进行通信,则apk端就可以实时显示fps了。
目前已经开发了除了可以计算fps的c++文件作为参考,下一步计划,开发apk或pc工具与之通信,实时显示fps。
附件是main程序,显push到手机,然后打开视频,执行文件,即可获取观看视频的fps,注意当前实现方式不支持过程中切换页面,需要先打开界面在执行,停止执行可以ctrl+C,
当前执行需要插着usb线,apk暂未开发,如下观看爱奇艺视频的情况下分别在Linux和手机下的执行结果:
特别注意,在编译NDK的使用需要将shell变量设置为空,因为手机情况下不需要adb shell;
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/6200/news/488954/违者必究! 以上就是上海博为峰软件测试培训 小编为您整理 Android NDK离线FPS获取方法的全部内容。