异常信息:
android.app.cts.SystemFeaturesTest#testCameraFeaturesFAIL junit.framework.AssertionFailedError: PackageManager#hasSystemFeature should NOT return ture for android.hardware.camera
分析:
根据测试时的异常信息和log(在测试时建议抓取adb log,测试报告反馈的信息有限,adb log信息更多也更直观)找到代码异常的位置:
android5.0/cts/tests/app/src/android/app/cts/SystemFeaturesTest.java中的函数assertNotAvailable(..)中出现了异常
找到调用该方法的位置,发现检测手机带有Camera的个数以及支持的功能。
出现该问题是由于手机没有Camera模块,但是在CTS测试时发现 手机的Camer的个数为0,但是系统支持Camera的功能,报异常
PS:高通平台下获取Camera的数量,手机目录:/dev/videox(X从1开始),有几个Camer就有几个节点,比如说手机有前后camera,那么在/dev目录下就有video1和video2两个节点
video0是高通默认的节点,不是camera
手机支持系统功能的文件都在frameworks/native/data/etc目录下,都是xml文件,编译后在对应手机的目录为:/system/etc/permissions
在手机开机的时候会读取手机中4个目录下的文件:
1./system/etc/sysconfig
2./system/etc/permissions
3./oem/etc/sysconfig
4./oem/etc/permissions
android 5.0中默认/system/etc/sysconfig,/oem/etc/sysconfig,/oem/etc/permissions中是没有任何文件的,所有的文件都在/system/etc/permissions目录下
读取文件夹下xml文件以及处理的逻辑是在SystemConfig.java中
Camera相关permissions在文件android.hardware.camera.flash-autofocus.xml和android.hardware.camera.front.xml文件中
解决方法:
删除掉对应文件中的内容
总结:
android.app.cts.SystemFeaturesTest中的异常碰到的多是permission问题,可以在frameworks/native/data/etc目录下找到对应的文件进行处理,android原生代码是都支持的,在实际的项目中根据需要会删除或者添加一些元器件导致测试不过,删除掉对应文件中的permission就可以了,添加的元器件没有CTS测试项可以不处理
补充:
在需要删除frameworks/native/data/etc目录下的文件时,不能直接删除frameworks/native/data/etc目录下对应的文件,应该去编译目录找到对应的编译语句,删除掉对应的语句即可,一般是在device目录下。