声明:本文只提供实现的思路。
一、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/tmp
adb shell chmod 777 /data/local/tmp/daemon
adb shell "./data/local/tmp/daemon & "
二、NDK编译文件并执行