Disabling first-run greeter on fresh android emulator

后端 未结 2 615
滥情空心
滥情空心 2021-01-24 08:29

I am writing a test that requires launching application directly from launcher. Because I can\'t emulate it correctly by launching through intent.

The problem is that wh

相关标签:
2条回答
  • 2021-01-24 08:52

    Have you tried using PackageManager.getLaunchIntentForPackage(..)? This will allow you to send the same Intent that the launcher uses to start your app. It should be equivalent to clicking on your application's launcher icon.

    If you do need to go through the launcher, you can use a UiWatcher to dismiss the first-run overlay. Whenever UiAutomator can't find an element, it will call the checkForCondition(..) method for each registered UiWatcher and give you a chance to dismiss any overlays or dialogs that are getting in the way.

    0 讨论(0)
  • 2021-01-24 09:00

    Apparently the greeter is called "cling". Searching though (rather old) code I found the following:

    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;
    }
    

    And next stop is isRunningInTestHarness() at 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);
    }
    

    Which in turn leads to adb shell setprop ro.test_harness true. Which just works.

    0 讨论(0)
提交回复
热议问题