无法找到Java Runtime Android Studio Robolectric。

30

我已将Robolectric添加到Android项目中。我正在使用Build Tools版本为19.0.1的Android Studio。

我可以使用以下命令运行测试:

$./gradlew test

能够成功执行。

如果我尝试:

$ gradle installDebug

它也能顺利执行:

$ ./gradlew installDebug
WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for debugTest as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for debugTest as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead.
:app:compileDebugNdk
:app:preBuild
:app:preDebugBuild
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugBuildConfig
:app:mergeDebugAssets
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugManifest
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJava
:app:preDexDebug
:app:dexDebug
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
:app:installDebug
8266 KB/s (46166 bytes in 0.005s)
 pkg: /data/local/tmp/app-debug-unaligned.apk
Success

BUILD SUCCESSFUL

Total time: 4.291 secs

然而,当我尝试从Android Studio在设备或模拟器上运行我的项目时,我遇到以下问题:

Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Applications/Android Studio.app/sdk/build-tools/19.0.1/dx --dex --output /Users/fstephany/Code/android/RoboElectricTestingProject/app/build/dex/debug /Users/fstephany/Code/android/RoboElectricTestingProject/app/build/classes/debug /Users/fstephany/Code/android/RoboElectricTestingProject/app/build/dependency-cache/debug
Error Code:
  1
Output:
  Unable to locate a Java Runtime to invoke.

有什么线索可以找到这个问题吗?我可以在CLI或Studio中安装installDebug,但这会妨碍我的工作。


1
请确保JAVA_HOME环境变量的值为您的根JDK路径,而不是bin目录。 - Piyush Agarwal
在我的bashrc文件中添加export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"(我使用的是OSX),并没有解决问题。 - fstephany
我现在已经有一天遇到了同样的问题。控制台构建正常,但是Android Studio找不到Java运行时来对我的依赖项进行dex处理。 - Janusz
这个问题发生在我改变了项目使用的JDK后(文件->项目结构...->SDK位置)。被接受的答案解决了这个问题。不需要设置任何JAVA_HOME。事实上,我在系统中没有设置任何JAVA_HOME变量。 - Christian García
4个回答

113

过期的gradle守护程序可能会在后台引起一些性能问题。我以为gradle会在空闲3小时后清理它,但事实并非如此。请进入您的终端,转到gradle文件所在的项目根文件夹,并输入以下命令:

./gradlew --stop

然后尝试重新运行您的构建。希望它能像解决我的问题一样解决您的问题。

我正在努力理解为什么会出现这个问题,但我还没有找到足够好的理由。如果我找到了什么,我会编辑答案。

更新

来自Gradle Design Github页面

目前,当内存压力发生时,守护进程存在严重问题。在压力下,守护进程进程出现GC抖动。

其中一个假设是使用了弱引用缓存,特别是在Groovy元类系统中,元类实例保存在弱引用缓存中。请注意,这不一定是守护程序的问题,因为它也适用于非守护程序的情况。但是,由于守护程序泄漏内存,因此增加了发生内存压力情况的机会,从而加剧了这种情况。

这并没有给出任何确定性的答案,但它确实让人有种守护程序可能是你所看到的问题(以及其他问题)的罪魁祸首的感觉。我曾经看到一些gradle任务花费的时间是通常所需时间的10倍,使用 --stop 运行也能缓解这些问题。


这对我有用。 我正在使用gradle和AndroidStudio。 从AndroidStudio部署应用程序(使用gradle)并从命令行部署我的Google应用引擎项目(使用gradle-wrapper)。 但是,每次我从命令行部署时,我都必须停止守护进程才能再次使AndroidStudio集成工作,这相当烦人。 - r-hold
1
也适用于我。请注意,重新启动IDE没有任何效果。守护进程将继续运行。 - Jeroen
这对我也起作用了。Gradle守护进程最近带来了难以置信的痛苦... - James Wald
谢谢@Maxwell,./gradlew --stop 对我也起作用了! - thisbytes

4

对于我来说,在路径变量中添加JAVA_HOME(Android Studio -> 首选项 -> 路径变量),然后重新启动Gradle守护进程,就像上面提到的(./gradlew --stop)一样,就可以解决问题了。

在Mac上,您可以使用/usr/libexec/java_home -v 1.6找到您的Java目录(版本6)。


1

尝试在您的build.gradle文件中设置sourceCompatibility和targetCompatibility。对于Java 1.7,它应该如下所示:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

这并不能帮助消除警告。 - JJD

1

回到Gradle 1.10版本对我有效(在OS-X上)。 您可以编辑gradle-wrapper属性或在Android-Studio中配置本地gradle发行版。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接