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'
})
作为测试的完全初学者,我在没有添加 - 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"
}
}
解决了问题
我很难 运行在 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'
})
作为测试的完全初学者,我在没有添加 - 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"
}
}
解决了问题