'getting exception "Error while connecting UiAutomation" on starting instrumentation using Runtime.getRuntime().exec

started the shell command from mainActivity.java, Runtime.getRuntime().exec("am instrument -w com.example.android.testing.uiautomator.BasicSample.test/androidx.test.runner.AndroidJUnitRunner");

and trying to get a UiDevice object in AndroidJUnit4 class as below,

    @RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion = 18)
public class ChangeTextBehaviorTest {
      @Before
    public void startMainActivityFromHomeScreen() throws UiObjectNotFoundException, 
          InterruptedException {
        // Initialize UiDevice instance
        Instrumentation instr = InstrumentationRegistry.getInstrumentation();
        mDevice = UiDevice.getInstance(instr);
     }

On running the instrumantation from adb, it works fine but through shell command from mainActivity it fails with below reason,

Line 14779: 02-20 12:27:45.655  7344  7411 I TestRunner: started: testChangeText_newActivity(com.example.android.testing.uiautomator.BasicSample.ChangeTextBehaviorTest)
Line 14784: 02-20 12:27:45.667  7344  7411 E TestRunner: failed: testChangeText_newActivity(com.example.android.testing.uiautomator.BasicSample.ChangeTextBehaviorTest)
Line 14785: 02-20 12:27:45.667  7344  7411 E TestRunner: ----- begin exception -----
Line 14786: 02-20 12:27:45.669  7344  7411 E TestRunner: java.lang.RuntimeException: Error while connecting UiAutomation@f398452[id=-1, flags=0]
Line 14787: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.app.UiAutomation.connect(UiAutomation.java:252)
Line 14788: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.app.Instrumentation.getUiAutomation(Instrumentation.java:2182)
Line 14789: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.uiautomator.UiDevice.getUiAutomation(UiDevice.java:1129)
Line 14790: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.uiautomator.QueryController.<init>(QueryController.java:95)
Line 14791: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.uiautomator.UiDevice.<init>(UiDevice.java:109)
Line 14792: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.uiautomator.UiDevice.getInstance(UiDevice.java:261)
Line 14793: 02-20 12:27:45.669  7344  7411 E TestRunner:    at com.example.android.testing.uiautomator.BasicSample.ChangeTextBehaviorTest.startMainActivityFromHomeScreen(ChangeTextBehaviorTest.java:73)
Line 14794: 02-20 12:27:45.669  7344  7411 E TestRunner:    at java.lang.reflect.Method.invoke(Native Method)
Line 14795: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
Line 14796: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
Line 14797: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
Line 14798: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:76)
Line 14799: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
Line 14800: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
Line 14801: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
Line 14802: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
Line 14803: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
Line 14804: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
Line 14805: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
Line 14806: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
Line 14807: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
Line 14808: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
Line 14809: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
Line 14810: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
Line 14811: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:162)
Line 14812: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.Suite.runChild(Suite.java:128)
Line 14813: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.Suite.runChild(Suite.java:27)
Line 14814: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
Line 14815: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
Line 14816: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
Line 14817: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
Line 14818: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
Line 14819: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
Line 14820: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
Line 14821: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
Line 14822: 02-20 12:27:45.669  7344  7411 E TestRunner:    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
Line 14823: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
Line 14824: 02-20 12:27:45.669  7344  7411 E TestRunner:    at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:439)
Line 14825: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2211)
Line 14826: 02-20 12:27:45.669  7344  7411 E TestRunner: Caused by: android.os.DeadObjectException
Line 14827: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.os.BinderProxy.transactNative(Native Method)
Line 14828: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.os.BinderProxy.transact(BinderProxy.java:550)
Line 14829: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.app.IUiAutomationConnection$Stub$Proxy.connect(IUiAutomationConnection.java:422)
Line 14830: 02-20 12:27:45.669  7344  7411 E TestRunner:    at android.app.UiAutomation.connect(UiAutomation.java:249)

Thannk you in Advance, little help if anyone already saw this will help to get through.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source