apex签名有的文件里面原本只有2个文件,生成后替换2个就可以,有的是4个文件 ,生成后替换4个文件
(一)android.appsecurity.cts.ApexSignatureVerificationTest#testApexPubKeyIsNotWellKnownKey
java.lang.AssertionError: must not use well known pubkey Expected: must not match well known key but: was </tmp/ApexSignatureVerificationTest15659635191785539726/tests-apex_com.android.adbd3670417821235385213/apex_pubkey>
原因:此项fail意思是com.android.adbd的apex使用的是google的签名,而不是项目的签名
解决方法:请替换成贵司的签名文件。可以参考packages/modules/vndk/apex/README.md
每个apex使用不同的签名文件,所以需要为报错的每个apex生成对应的签名文件。
建议签名文件的前缀和apex的包名保持一致, 然后将生成的签名文件放入贵司指定的存放签名文件的文件夹中。
如何生成 apex 镜像签名文件:注意是在ap目录下,非sys目录
cd alps/external/avb
1. openssl genrsa -out com.android.adbd.pem 4096
2. ./avbtool extract_public_key --key com.android.adbd.pem --output com.android.adbd.avbpubkey
3. openssl req -x509 -newkey rsa:4096 -nodes -days 999999 -keyout key.pem -out com.android.adbd.x509.pem
下面需要输入公司的信息
Country Name:CN
State:Guangdong
Locality Name:Shenzhen
Organization Name:Wingtech
Organization Unit Name:Wingtech Mobile Communications Co. Ltd.
Common Name: S88523AA1-->不同的项目需要修改成不一样
Email address:scm@wingtech.com
4.openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -out com.android.adbd.pk8 -nocrpt
5.生成之后,在alps find -name com.android.adbd.avbpubkey,
把当前目录(alps/external/avb)自己生成的com.android.adbd.avbpubkey
和com.android.adbd.pem文件替换掉find路径下
(packages/modules/adb/apex)的com.android.adbd.avbpubkey和com.android.adbd.pem文件
6.删除所有alps/external/avb下生成的新文件,特别是需要 rm key.pem
(二)GtsBootHealthHostTestCases
android.boothealth.gts.BootHealthHostTest#testUpdatableProcessCrashNotDetected
Upadatable process crash detected: vendor.dataqti expected to be false at android.boothealth.gts.BootHealthHostTest.testUpdatableProcessCrashNotDetected(BootHealthHostTest.java:75)
此问题是通讯模块负责,功能未删除干净
在init.class_main.sh里面删除二个 start vendor.dataqti 后pass
(三)GtsPermissionTestCases
com.google.android.permission.gts.DefaultPermissionGrantPolicyTest#testDefaultGrantsWithRemoteExceptions
l
java.lang.AssertionError: packageName: com.amazon.mShop.android.shopping { priv app: false targetSDK: 30 uid: 10159 persistent: false signature: 2F19ADEB284EB36F7F07786152B9A1D14B21653203AD0B04EBBF9C73AB6D7625 on system image: true has platform signature: false message: cannot be granted by default to package { permission: android.permission.BLUETOOTH_CONNECT permission: android.permission.BLUETOOTH_ADVERTISE permission: android.permission.ACTIVITY_RECOGNITION permission: android.permission.BLUETOOTH_SCAN } }
com.amazon.mShop.android.shopping包不能默认授予以下权限,沟通三方去掉或者申请豁免
(四)GtsGmscoreHostTestCases
com.google.android.gts.security.AttestationRootHostTest#testEcAttestationChain
fail
junit.framework.AssertionFailedError: com.google.android.gts.security.AttestationRootTest.testEcAttestationChain failed.
com.google.android.gts.security.AttestationRootHostTest#testRsaAttestationChain
fail
junit.framework.AssertionFailedError: com.google.android.gts.security.AttestationRootTest.testRsaAttestationChain failed.
需要写入attestation key测试
(五)GtsFeaturesTestCases--com.google.android.features.gts.GoogleFeaturesTest#testFeatureAiai
[SOLUTION]
T版本才强制要求预置 ,S版不需要.
请在GMS包里删掉ASI,修改方法如下:
products/gms.mk
GMS_PRODUCT_PACKAGES += \
-- AndroidSystemIntelligence_Features \
CalendarGoogle \
TagGoogle \
talkback \
LatinImeGoogle
etc/sysconfig/google.xml
<!-- ASI integration. To enable Playstore update -->
<!-- Use this if ASI Features APK is preloaded (and do NOT use com.google.android.feature.ASI_MINIMAL) -->
-- <feature name="com.google.android.feature.ASI" />
六com.google.android.gts.devicepolicy.managedprovisioning.DeviceOwnerProvisioningHostsideTest#testRequiredAppsInManagedUser fail
08-22 16:11:39.143 1910297 18269 18285 E TestRunner: failed: testRequiredApps_ManagedUser(com.google.android.gts.managedprovisioning.AfwRequiredAppsTest)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: ----- begin exception -----
08-22 16:11:39.144 1910089 13562 13985 W ProxyAndroidLoggerBackend: Too many Flogger logs received before configuration. Dropping old logs.
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: java.lang.AssertionError: Should have at least one packages to handle Intent { act=android.intent.action.DIAL }, found []
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: Expected: a value greater than <0>
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: but: <0> was equal to <0>
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at com.google.android.gts.managedprovisioning.AfwRequiredAppsTest.assertAndGetPackagesHandleIntent(AfwRequiredAppsTest.java:511)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at com.google.android.gts.managedprovisioning.AfwRequiredAppsTest.assertRequiredAppsInDeviceOwnerOrManagedUser(AfwRequiredAppsTest.java:554)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at com.google.android.gts.managedprovisioning.AfwRequiredAppsTest.testRequiredApps_ManagedUser(AfwRequiredAppsTest.java:206)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at java.lang.reflect.Method.invoke(Native Method)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:61)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:148)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:142)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: at java.lang.Thread.run(Thread.java:920)
08-22 16:11:39.144 1910297 18269 18285 E TestRunner: ----- end exception -----
[SOLUTION]
请确保有预制Google Mainline Module中的Google DocumentsUI,
然后在如下文件中加上Google DocumentsUI的包名(com.google.android.documentsui).
base/core/res/res/values/required_apps_managed_device.xml
base/core/res/res/values/required_apps_managed_profile.xml
base/core/res/res/values/required_apps_managed_user.xml
七(CtsOsTestCases fail*7)
run cts -m CtsOsTestCases
【预期结果】PASS
【实际结果】junit.framework.AssertionFailedError: expected:<0> but was:<1>
at junit.framework.Assert.fail(Assert.java:50)
at junit.framework.Assert.failNotEquals(Assert.java:287)
at junit.framework.Assert.assertEquals(Assert.java:67)
at junit.framework.Assert.assertEquals(Assert.java:199)
at junit.framework.Assert.assertEquals(Assert.java:205)
at android.os.cts.SecurityFeaturesTest.testPrctlDumpable(SecurityFeaturesTest.java:82)
清零后pass,清零操作步骤:
1、user版本开机后,adb devices检查连接设备,再adb reboot bootloader进fastboot;
2、fastboot模式下,执行fastboot oem zeroflag clr, 然后fastboot oem zeroflag get确保返回0x22, 再fastboot reboot重启;
3、再次重启后,adb devices、adb shell无法连接设备。
八(CtsWindowManagerDeviceTestCases--android.server.wm.AnrTests#slowUiThreadWithKeyEventTriggersAnr)只能用user版本测试,具体报错没找到原因,后面用user版本测又pass了
九
run cts -m CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testRollbackFailsOtherSessions
run cts -m CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testApkOnlyMultipleStagedPartialRollback
run cts -m CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testApexAndApkStagedRollback
run cts -m CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testApkOnlyMultipleStagedRollback
run cts -m CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testSimultaneousRollbacksBothSucceed
run cts -m CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testApkOnlyStagedRollback
解决方法:cts Rollback问题:报告的bugreport搜rollbackReason
例子:CtsRollbackManagerHostTestCases -t com.android.cts.rollback.host.RollbackManagerHostTest#testRollbackFailsOtherSessions
log中:rollbackReason: REASON_NATIVE_CRASH failedPackageName: thh-2-0 ;和thh-2-0修改相关导致,rollback主要测试apex相关内容及so库等,开机加载是否异常
CtsViewTestCases --android.view.cts.KeyEventTest#testIsMediaSessionKey
FAILKeyEvent.java中的isMediaSessionKey方法里面的case KeyEvent.KEYCODE_MUTE被删掉导致
CtsAppSecurityHostTestCases--android.appsecurity.cts.AdoptableHostTest#testPrimaryStorage FAIL
问题分析:该测试项主要是测试SD卡存储相关,测试过程中会反复读取SD卡
测试建议:测试前请插入高速大容量SD卡,本地自测使用16GB的卡
十 Android STS 排查方法
常见的fail项 分为如下2种:
测试项中 不包含CVE 的 和 包含CVE 的
1、android.security.sts.Bug_258188673#testPocBug_258188673
这就是不包含CVE的,直接显示为 testPocBug_258188673
如果测试用例名称不包含CVE-ID,谷歌搜索“Android A-[Bug ID]”
2、android.security.cts.CVE_2021_0487#testPocCVE_2021_0487
这就是包含CVE的,直接显示为 testPocCVE_2021_0487
十一 Failures on CtsPermissionTestCases
java.lang.RuntimeException: java.lang.AssertionError: The job doesn't have requested state waiting yet, current state: ready
1.对比正常和异常log发现执行Running command: cmd jobscheduler get-job-state -u 0 com.google.android.permissioncontroller 6后
正常有log: 行 43757: 06-20 10:38:40.372 10203 12969 12969 V AccessibilityJobService: accessibility privacy source job created.
行 43758: 06-20 10:38:40.374 10203 12969 12969 V AccessibilityJobService: accessibility privacy source job started.
异常时没有
2.异常时adb shell dumpsys jobscheduler com.google.android.permissioncontroller > jobs.txt发现
Registered 196 jobs:
JOB #u0a213/6: 2d94f23 com.google.android.permissioncontroller/com.android.permissioncontroller.privacysources.AccessibilityJobService
u0a213 tag=*job*/com.google.android.permissioncontroller/com.android.permissioncontroller.privacysources.AccessibilityJobService#6
Source: uid=u0a213 user=0 pkg=com.google.android.permissioncontroller
JobInfo:
Service: com.google.android.permissioncontroller/com.android.permissioncontroller.privacysources.AccessibilityJobService
Restricted due to: thermal.
服务受限的原因是thermal,铜鼓命令查看Thermal Status发现状态是2,会限制job运行,改为1或0可以pass
3通过命令关闭温控可以pass
3.1 adb shell dumpsys thermalservice | grep "Thermal Status"
3.2 如果" Thermal Status " 值 >= 3 执行第2步 2. adb shell cmd thermalservice override-status 0//关闭温控