CTS/GTS 常见问题解答
1.android.security.cts.PackageSignatureTest测试fail(MTK平台)
原因:由于用的是google default key而导致的fail,需要自己定义release key,不仅可以满足CTS request,还可以满足工信部CATR TAF spec。
方案:在编译器执行如下命令:
Genernate the release key
./development/tools/make_key releasekey '/C=CN/ST=BeiJing/L=HaiDian/O=MediaTek/OU=WCD/CN=demo/emailAddress=demo@mediatek.com',类似以此产生platform keys,media keys,shared keys,testkey.
然后把这些生成的密钥移动到device/mediatek/common/security/${Project}路径下,还有一点最重要的是要在ProjectConfig.mk中设置宏MTK_SIGNATURE_CUSTOMIZATION = yes,最后编译自动会生成二进制的apk签名,问题解决!
2.com.google.android.permission.gts.InitialRuntimePermissionStateTest#testAllSystemAppsUsingRuntimePermissionsTargetMncAndAboveSdk测试fail(MTK/Sprd都适用)
原因:这是由于一些apk的sdk版本过低导致的权限问题
方案:导出device.log,查找出是哪些apk,然后在对应apk下的AndroidManifest下修改下目标sdk,一般都修改为当前最新版的,有些危险权限(九组)还要在代码中添加运行时代码,不然apk会崩的。
3.Camera FOV Calibration测项failed(适用于MTK平台,展讯平台修改较复杂,后面会更新)
原因:Report FOV与Display FOV的值相差2度以上
方案:测试时把绿线和黑线对齐,这时查看Display FOV实测值是多少,记录下来。然后查看对应项目的cfg_setting_imgsensor.cpp文件,看看getSensorViewAngle中MainSensorHorFOV的值是多少?把MainSensorHorFOV的值改成刚才记录的实际结果就OK了,如果是前摄有误差,同理修改下SubSensorHorFOV 的值为实测值。
4.android.os.cts.BuildVersionTest#testBuildFingerprint测试fail
原因:fingerprint信息匹配不一致
方案:fingerprint是设备的唯一标识,由设备的多个信息拼接合成。我自己的修改习惯通常就是在build/core/Makefile文件里重新定义BUILD_FINGERPRINT,比如: BUILD_FINGERPRINT := $(FINGER_PRINT_BRAND)/$(FINGER_PRINT_NAME)/$(FINGER_PRINT_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(FINGER_PRINT_TIME):$(TARGET_BUILD_VARIANT)/$(FINGER_PRINT_BUILD_VERSION_TAGS)
然后在build/core/version_default.mk文件中添加自己对应的字段
FINGER_PRINT_BRAND:=
FINGER_PRINT_NAME:=
FINGER_PRINT_DEVICE:=
FINGER_PRINT_BUILD_VERSION_TAGS:= release-keys(这个必须是release-keys,不然会有其它fail项,具体的我忘记了,后续会补充)
FINGER_PRINT_TIME :=$(shell date +%H%M%S)
brand,name,device在对应的buildinfo文件都是有的,厂商名,设备名等,这时就能保证信息匹配,fingerprint会在out目录下的build.prop文件中生成。
5.com.google.android.os.gts.RequiredComponentsTest#testServicesLibHostAppSignedCorrectly
com.google.android.os.gts.RequiredComponentsTest#testSharedLibHostAppSignedCorrectly两项测试fail
方案:去除平台自带的ExtShared.apk和ExtService..apk,用google原生的即可PASS,如果仍然测不过,就编一个release-keys的版本,写死ro.build.tags =release-keys
6.com.google.android.installpackageswhitelist.gts.GtsInstallPackagesWhitelistDeviceTest#testInstallerPackagesAgainstWhitelist
原因:此项为GTS5.0_r1新增测试项,由于非whitelist的apk授予了INSTALL_PACKAGES权限,在log中可以明确看出哪些apk被授予了此项权限
方案:在AndroidManifest.xml文件中去除即可,或者向google申请把此apk添加到whitelist中
还有一种情况是此apk已经加入到了白名单当中,但是在预置到项目中时用的是platform平台签名(签名不匹配)也会导致fail,这时要在Android.mk文件中修改为PRESIGNED即可。Report下有个config目录,里面的.dynamic文件包含已经申请了白名单的apk。
7.com.android.cts.monkey.MonkeyTest#testIsMonkey测试failPRESIGNED
此问题当时搞了好久没查到原因,log也没看出来异常,最后经过大神帮助解决了,竟然是项目中log打太多导致的fail
看了Monkeytest.java测试源码,由于中间log太多,导致executeAdbCommand方法长时间得不到执行,导致超时fail。
8.android.provider.cts.MediaStoreIntentsTest#testViewImageFile junit.framework.AssertionFailedError: No ResolveInfo found for Intent { act=android.intent.action.VIEW dat=http://example.com/image typ=image/bmp }
android.provider.cts.MediaStoreIntentsTest#testViewVideoFile junit.framework.AssertionFailedError: No ResolveInfo found for Intent { act=android.intent.action.VIEW dat=http://example.com/video typ=video/mpeg4 }
由于项目中去除了GMS包中的photos和平台的Gallery,用的是第三方Gallery导致的fail
解决方案:增加GMS包中的photos或平台的Gallery中的一个即可,或者在第三方Gallery中的AndroidManifest.xml添加这两种格式类型的support。
9.
android.app.cts.DialogTest#testOnKeyDownKeyUp
android.app.cts.InstrumentationTest#testSendKeySync
android.view.cts.ContentPaneFocusTest#testAccessActionBar
android.webkit.cts.WebViewTest#testGetHitTestResult
android.widget.cts.DialerFilterTest#testOnKeyUpDown
android.app.cts.InstrumentationTest#testSendStringSync
android.view.cts.ViewTest#testOnKeyDownOrUp
这些项测试fail是由于输入法没有响应,需要对第三方预置默认输入法手动禁用并使用Android 键盘输入法。
抽空先写这么多,我会定期更新,常见的fail项还有很多,解决CTS fail项一是靠积累经验,二是要分析log,研究一下google测试源码,循序渐进慢慢就能掌握,转载请注明出处,谢谢!