Android CTS 测试框架内部本质是调用 am instrument , 因此过去我认为 cts 的命令我都可以用 am instrument 替代, 但最近遇到问题了
执行 AccessibilityFocusAndInputFocusSyncTest 得到错误
adb shell am instrument -e class android.accessibilityservice.cts.AccessibilityFocusAndInputFocusSyncTest#testActionAccessibilityFocus
-w com.android.cts.accessibilityservice/android.test.InstrumentationCtsTestRunner
查了原因是没有TouchExplorationEnable设置为 1
而测试 AccessibilityManagerTest 也失败,因为它明确要求 TouchExplorationEnable 设置为1
adb shell am instrument -e class android.view.accessibility.cts.AccessibilityManagerTest -wandroid.view.cts.accessibility/android.test.android.test.InstrumentationTestRunner
测试 CtsAccessibilityTestCases.xml 说明如下:
<TestPackage appNameSpace="android.view.cts.accessibility" appPackageName="android.accessibility" name="CtsAccessibilit
yTestCases" runner="android.test.InstrumentationCtsTestRunner" testType="com.android.cts.tradefed.testtype.AccessibilityTestRunner" version="1.0">
注意这个 testType="com.android.cts.tradefed.testtype.AccessibilityTestRunner"
再查看 AccessibilityTestRunner ,它会编译出tradefed-host.jar ( 在是 devices 上跑 ,所以这个 host应该理解的 devices )
cts/tools/tradefed-host/src/com/android/cts/tradefed/testtype/AccessibilityTestRunner.java#enableAccessibilityAndServicesAndTouchExploration
因此, CTS 在执行测试的时候, 先把tradefed-host.jar, 安装到 devices 上, 而后根据 testType 决定去调用AccessibilityTestRunner
但用 adb shell am instrument ... 跑测试,它会略过 AccessibilityTestRunner的执行,所以
enableAccessibilityAndServicesAndTouchExploration 不会被调用
用 android-cts/tools/cts-tradefed 执行
run cts -p android.accessibility ( 或者是创建一个只有 android.accessibility 的 plan ) 就不会遇到这种情况,因为AccessibilityTestRunner 会执行
(当然也可以用 sqlite3 打开 db, 直接改)