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文件,看看getSensorViewAngleMainSensorHorFOV的值是多少?把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測試源碼,循序漸進慢慢就能掌握,轉載請注明出處,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM