目录
- 1. 本文概述
- 2.CTS 测试
- 3.Gnss Flow
- 3.1 Gnss Start Flow
- 3.2 Gnss Location Output Flow
1. 本文概述
本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/location/cts/GnssTtffTests.java),找测试failed的原因,因此去简单了解了哈Android的源码;另外出于好奇,结合CTS 中测项去捋了捋从Framework层到HIDL启动gnss 和 位置上报的流程。
如下是一些学习和参考的链接:
- 肝疼了3万字的Android源码学习指南 : 可简单了解Android 的架构和Android 初始化的流程
- 源码在线查看网站 : 貌似这个网站访问不了(code 时间点:20240908)
- CTS 环境搭建 : 主要是一些软件的安装如adb,appt2,python,JDK等,然后就是CTS 套件,需要根据自己的测试版本来选择下载; (我是下载的Android 14 R5 Compatibility Test Suite (CTS) - ARM)
- Gnss flow 解析参考 :还是有一定的参考价值,但是这个是Andorid 11的,貌似Android 15的flow 有一些变化;当时对照着看,没有看走
贴一张android 启动流程图(来自链接1)
2.CTS 测试
- 安装测试环境,参考第一部分的链接3
- Gnss CTS test
- 启动cts : ./android-cts/tools/cts-tradefed
- 运行 gnss cts: run cts -m CtsGnssLocationTestCase
- 如果运行失败了,执行 l r (list result)查看结果,将失败的在跑一次 run retry -r sessionid
- 最后的测试日志&结果可以在android-cts/log or android-cts/result 中查看
3.Gnss Flow
由于访问不了https://cs.android.com/,就不再重新去追一次流程了,贴上之前追好了的图片(有些简陋,将就看,CodeBase 属于Android15)
3.1 Gnss Start Flow
App -> Framework -> JNI -> HIDL -> Drive
3.2 Gnss Location Output Flow
App <- Framework <- JNI <- HIDL <- Drive
需要注意下JNI部分: method_reportLocation = env->GetMethodId(clazz, “reportLocation”, “(ZLandroid/location/Location;)V”); 该语句表示会调用Java层(GnssNative.jave)中的reportLocation(bool, Location)函数,注意有两个参数
贴一张JAVA 和JNI 的函数参数签名的对照表(来自链接)