allure-android icon indicating copy to clipboard operation
allure-android copied to clipboard

Multidex on API 19 problem

Open pavel-shatskikh opened this issue 7 years ago • 0 comments

Hi!

If project has multidex on API 19 or below we must call the following code before starting: MultiDex.installInstrumentation(InstrumentationRegistry.getContext(), InstrumentationRegistry.getTargetContext()); otherwise it will fall with java.lang.NoClassDeffoundError: kotlin.jvm.internal.intrinsics. But we can get context only after android.app.Instrumentation#start finished.

The problem in 'AllureAndroidListener': when AndroidJUnitRunner creates instance in android.support.test.runner.AndroidJUnitRunner#parseRunnerArgs it (AllureAndroidListener) statically calls InstrumentationRegistry.getContext() in ru.tinkoff.allure.android.AllureAndroidLifecycleKt#obtainDirectory and it fall with the following exception:

 java.lang.RuntimeException: Exception thrown in onCreate() of ComponentInfo{ru.app.test/uitesting.core.runner.UITestApplicationRunner}: java.lang.IllegalArgumentException: Failed to create: ru.tinkoff.allure.android.AllureAndroidListener
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4338)
        at android.app.ActivityThread.access$1500(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalArgumentException: Failed to create: ru.tinkoff.allure.android.AllureAndroidListener
        at android.support.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:556)
        at android.support.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:474)
        at android.support.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:231)
        at android.support.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:321)
        at android.support.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:263)
        at uitesting.core.runner.UITestApplicationRunner.onCreate(UITestApplicationRunner.java:40)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4335)
        at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at android.support.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:544)
        at android.support.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:474) 
        at android.support.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:231) 
        at android.support.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:321) 
        at android.support.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:263) 
        at uitesting.core.runner.UITestApplicationRunner.onCreate(UITestApplicationRunner.java:40) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4335) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.ExceptionInInitializerError
        at ru.tinkoff.allure.android.AllureAndroidListener.<init>(AllureAndroidListener.kt:16)
        at java.lang.reflect.Constructor.constructNative(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
        at android.support.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:544) 
        at android.support.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:474) 
        at android.support.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:231) 
        at android.support.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:321) 
        at android.support.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:263) 
        at uitesting.core.runner.UITestApplicationRunner.onCreate(UITestApplicationRunner.java:40) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4335) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.
        at android.support.test.InstrumentationRegistry.getInstrumentation(InstrumentationRegistry.java:45)
        at ru.tinkoff.allure.android.AllureAndroidLifecycleKt.obtainDirectory(AllureAndroidLifecycle.kt:23)
        at ru.tinkoff.allure.android.AllureAndroidLifecycle.<init>(AllureAndroidLifecycle.kt:16)
        at ru.tinkoff.allure.android.AllureAndroidLifecycle.<clinit>(AllureAndroidLifecycle.kt:15)
        at ru.tinkoff.allure.android.AllureAndroidListener.<init>(AllureAndroidListener.kt:16) 
        at java.lang.reflect.Constructor.constructNative(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
        at android.support.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:544) 
        at android.support.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:474) 
        at android.support.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:231) 
        at android.support.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:321) 
        at android.support.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:263) 
        at uitesting.core.runner.UITestApplicationRunner.onCreate(UITestApplicationRunner.java:40) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4335) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 
04-24 1

pavel-shatskikh avatar Apr 24 '18 10:04 pavel-shatskikh