在新的Android模拟器上禁用首次运行的欢迎程序

时间:2015-06-14 00:15:53

标签: android android-uiautomator

我正在编写一个需要直接从启动器启动应用程序的测试。因为我无法通过意图启动来正确模拟它。

问题在于,当我在一个新的模拟器上运行测试时(我正在使用Travis CI,但它可以很容易地在我的家用PC上重现),模拟器以"第一次运行"迎宾覆盖。这会阻止我的uiautomator代码正确启动应用程序。

我试图添加一些代码来关闭那个欢迎,但不幸的是,当我的" greeter检测到并关闭时,它会出现一些延迟。代码已经停止工作,认为海岸线是清晰的。

是否有任何保证禁用该招手的方法?可能会有一些偏好,或者只是一个能够可靠地杀死欢迎的代码示例。

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用PackageManager.getLaunchIntentForPackage(..)?这将允许您发送启动程序用于启动应用程序的相同Intent。它应该等同于点击应用程序的启动器图标。

如果您确实需要通过启动器,可以使用UiWatcher关闭首次运行的叠加层。每当UiAutomator找不到元素时,它会为每个注册的UiWatcher调用checkForCondition(..)方法,并让你有机会忽略任何阻碍的对话框或对话框。

答案 1 :(得分:0)

显然,迎宾员被称为" cling"。搜索(相当旧)代码我发现了以下内容:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.2_r1/com/android/launcher2/Launcher.java#Launcher.isClingsEnabled%28%29

private boolean isClingsEnabled() {
    // TEMPORARY: DISABLE CLINGS ON LARGE UI
    if (LauncherApplication.isScreenLarge()) return false;
    // disable clings when running in a test harness
    if(ActivityManager.isRunningInTestHarness()) return false;
    return true;
}

下一站是isRunningInTestHarness() http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.2_r1/android/app/ActivityManager.java#ActivityManager.isRunningInTestHarness%28%29

public static boolean isRunningInTestHarness() {
    return SystemProperties.getBoolean("ro.test_harness", false);
}

反过来导致adb shell setprop ro.test_harness true。这才有效。