全国服务热线:400-6136-679

位置:上海博为峰软件测试培训 > 学校动态 > Android NDK离线FPS获取方法

Android NDK离线FPS获取方法

来源:上海博为峰软件测试培训时间:2022/2/24 10:24:25

  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工具并解压到一个目录

Android NDK实现离线FPS实时获取方方法

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获取方法的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-6136-679