Android Studio 3.6 测试框架意外退出,orchestrator 崩溃

Android Studio 3.6 Test framework quit unexpectedly, Crash of orchestrator

我很难 运行在 Android Studio 中进行仪器化测试。

当我尝试 运行 多个测试用例时,"Test framework quit unexpectedly" 出现:

...并且所有测试在模拟器中继续 运行,但是 Android Studio 没有得到结果。

Logcat 显示:

...
03-17 11:38:59.236  1699  1719 W ActivityManager: Scheduling restart of crashed service androidx.test.orchestrator/.OrchestratorService in 1000ms
03-17 11:38:59.236  1699  1719 W ActivityManager: Crash of app androidx.test.orchestrator running instrumentation ComponentInfo{androidx.test.orchestrator/androidx.test.orchestrator.AndroidTestOrchestrator}
03-17 11:38:59.236  1699  1721 W zygote  : kill(-8537, 9) failed: No such process
03-17 11:38:59.238  1699 13861 W Binder  : Outgoing transactions from this process must be FLAG_ONEWAY
03-17 11:38:59.238  1699 13861 W Binder  : java.lang.Throwable
03-17 11:38:59.238  1699 13861 W Binder  :  at android.os.BinderProxy.transact(Binder.java:752)
03-17 11:38:59.238  1699 13861 W Binder  :  at android.app.IInstrumentationWatcher$Stub$Proxy.instrumentationFinished(IInstrumentationWatcher.java:160)
03-17 11:38:59.238  1699 13861 W Binder  :  at com.android.server.am.InstrumentationReporter$MyThread.run(InstrumentationReporter.java:86)
03-17 11:38:59.281  1699  1721 W zygote  : kill(-8537, 9) failed: No such process
03-17 11:38:59.323  1699  1721 W zygote  : kill(-8537, 9) failed: No such process
03-17 11:38:59.353 13845 13845 W app_process: Unexpected CPU variant for X86 using defaults: x86
03-17 11:38:59.362  1699  1721 W zygote  : kill(-8537, 9) failed: No such process
03-17 11:38:59.385  1699  1741 W PackageManager: Code path for androidx.test.orchestrator changing from /data/app/androidx.test.orchestrator-fgDRlA7iNSNiyWm4dLj4hg== to /data/app/androidx.test.orchestrator-6QljegpCqjAHwDuS_O9G9Q==
03-17 11:38:59.385  1699  1741 W PackageManager: Resource path for androidx.test.orchestrator changing from /data/app/androidx.test.orchestrator-fgDRlA7iNSNiyWm4dLj4hg== to /data/app/androidx.test.orchestrator-6QljegpCqjAHwDuS_O9G9Q==
03-17 11:38:59.424 13845 13870 W MessageQueue: Handler (android.os.Handler) {9320712} sending message to a Handler on a dead thread
03-17 11:38:59.424 13845 13870 W MessageQueue: java.lang.IllegalStateException: Handler (android.os.Handler) {9320712} sending message to a Handler on a dead thread
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.MessageQueue.enqueueMessage(MessageQueue.java:545)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.Handler.enqueueMessage(Handler.java:662)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.Handler.sendMessageAtTime(Handler.java:631)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.Handler.sendMessageDelayed(Handler.java:601)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.Handler.post(Handler.java:357)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.ResultReceiver$MyResultReceiver.send(ResultReceiver.java:57)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at com.android.internal.os.IResultReceiver$Stub.onTransact(IResultReceiver.java:58)
03-17 11:38:59.424 13845 13870 W MessageQueue:  at android.os.Binder.execTransact(Binder.java:697)
03-17 11:38:59.436 13768 13850 W zygote  : Long monitor contention with owner firebase-iid-executor (13808) at void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)(AbstractStringBuilder.java:124) waiters=0 in java.util.TimeZone java.util.TimeZone.getTimeZone(java.lang.String) for 114ms
03-17 11:38:59.519 13768 13768 W ResourceType: Failure getting entry for 0x7f0c0112 (t=11 e=274) (error -75)
03-17 11:38:59.520 13768 13768 W ResourceType: Failure getting entry for 0x7f0c0113 (t=11 e=275) (error -75)
03-17 11:38:59.608  1571  1809 E         : Couldn't opendir /data/app/vmdl185214765.tmp: No such file or directory
03-17 11:38:59.608  1571  1809 E installd: Failed to delete /data/app/vmdl185214765.tmp: No such file or directory
03-17 11:38:59.695  1699  1719 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:androidx.test.orchestrator flg=0x4000010 (has extras) } to com.google.android.gms/.games.chimera.GamesSystemBroadcastReceiverProxy
03-17 11:38:59.702  1699  1719 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:androidx.test.orchestrator flg=0x4000010 (has extras) } to com.google.android.gms/.photos.autobackup.PhotosAppUninstalledReceiver
...

我的测试依赖项:

    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-web:3.2.0'
    androidTestImplementation ('androidx.test.espresso:espresso-contrib:3.2.0') {
        exclude module: 'support-compat'
    }
    androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0'
    androidTestImplementation 'androidx.test:core:1.2.0'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test:rules:1.2.0'
    androidTestUtil 'androidx.test:orchestrator:1.2.0'
    androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'

我发现 "Test framework quit unexpectedly" 和 "Outgoing transactions from this process must be FLAG_ONEWAY" 都很少提到在 Android Studio 中禁用即时 运行,但是从 3.5 开始就没有即时 运行,它已重命名为 Apply code changes,我看不到任何关闭它的选项。

有什么想法可以继续吗?

请帮忙。

似乎是 AS 3.6 的一个 Bug。

根据 Reddit 中的这个帖子:https://www.reddit.com/r/androiddev/comments/f9xsz2/anyone_else_having_issues_running_androidtest/

它将在 3.6.2 中修复。

Vitor Carvalho 是正确的,这是一个 Android Studio v3.6.1 问题。我通过卸载 Android Studio 解决了这个问题,然后降级回 v3.5.3。

要卸载 Android Studio,follow this answer's guidance,基本上可以归结为:

Execute these commands in the terminal (excluding the lines with hashtags - they're comments):

# Deletes the Android Studio application
# Note that this may be different depending on what you named the application as, or whether you downloaded the preview version
rm -Rf /Applications/Android\ Studio.app
# Delete All Android Studio related preferences
# The asterisk here should target all folders/files beginning with the string before it
rm -Rf ~/Library/Preferences/AndroidStudio*
# Deletes the Android Studio's plist file
rm -Rf ~/Library/Preferences/com.google.android.*
# Deletes the Android Emulator's plist file
rm -Rf ~/Library/Preferences/com.android.*
# Deletes mainly plugins (or at least according to what mine (Edric) contains)
rm -Rf ~/Library/Application\ Support/AndroidStudio*
# Deletes all logs that Android Studio outputs
rm -Rf ~/Library/Logs/AndroidStudio*
# Deletes Android Studio's caches
rm -Rf ~/Library/Caches/AndroidStudio*
# Deletes older versions of Android Studio
rm -Rf ~/.AndroidStudio*

然后,从 Android Studio archive 安装先前版本的 Android Studio。

正如 Victor Carbalho 提到的,这是 Android Studio 3.6.1 中的一个错误

我现在只是禁用 orchestrator。

testOptions {
//     execution 'ANDROIDX_TEST_ORCHESTRATOR'
}

dependencies {
//    androidTestUtil 'androidx.test:orchestrator:1.2.0'
}

删除或评论下面的内容并不能解决实际目的:

testOptions {
//     execution 'ANDROIDX_TEST_ORCHESTRATOR'
}

dependencies {
//    androidTestUtil 'androidx.test:orchestrator:1.2.0'
}

根据建议:https://developer.android.com/training/testing/junit-runner#ato-gradle,我们应该使用它。

我也遇到了同样的问题,比如在 运行 测试用例时,出现“框架意外退出”消息,因为我使用的是 3.6.1 android 工作室版本。

更新android studio 到4.0.1 版本后,这个问题已经解决。 我现在可以成功执行所有测试用例了。

当我在 Android 4.1,

上执行文件-> 使缓存无效并重新启动时,它对我有用

我使用的是 AS 4.1.1,如果您使用 fragment-testing 工件,错误仍然存​​在。 None 以上解决方案有效。

在我的例子中,解决问题的方法是从工件中排除 core 依赖项

debugImplementation ("androidx.fragment:fragment-testing:1.2.5", {
    exclude group: 'androidx.test', module: 'core'
})

Source

作为测试的完全初学者,我在没有添加 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 模块级 build.gradle 文件。

其他人可能不是这样,但我在添加时解决了它。 根据 documentation

To use JUnit 4 test classes, make sure to specify AndroidJUnitRunner as the default test instrumentation runner in your project by including the following setting in your app's module-level build.gradle file:

所以你可以通过添加这个来尝试一下。

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

在 Android Studio 4.1 中遇到同样的错误,添加以下依赖项

androidTestImplementation "androidx.test.espresso:espresso-core:x.x.x"

随着添加

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

解决了问题