我已将Robolectric添加到Android项目中。我在19.0.1中使用Android Studio和Build Tools。
我可以用以下方式运行测试:
$./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.
有关在何处查找此问题的任何提示?我总是可以installDebug
然后从CLI或Studio启动应用程序,但它正在阻碍。
答案 0 :(得分:110)
过期的gradle守护程序可能会在后台导致一些性能问题。我认为gradle会在闲置3小时后将其清理干净,但情况似乎并非如此。转到终端,转到项目的gradle文件所在的根文件夹,然后输入命令
./gradlew --stop
然后再次尝试运行您的构建。希望能像我一样解决你的问题。
我试图理解为什么这会引起一个问题,但我还没有找到足够好的理由。如果我找到任何东西,我会编辑答案。
<强>更新强>
目前,当内存压力发生时,守护进程存在严重问题。在压力下,守护进程会出现GC捶打现象。
对此的一个假设是使用弱引用缓存,特别是在Groovy元类系统中,元类实例保存在弱引用缓存中。请注意,这不一定是守护进程的问题,因为它也适用于非守护进程的情况。然而,守护程序泄漏记忆会加剧,从而增加了记忆压力发生的可能性。
这并没有给出任何确定的答案,但它确实给了预感,守护程序可能是你所看到的(以及其他事情)的罪魁祸首。我已经看到一些gradle任务需要花费10倍的时间,并且运行--stop也可以缓解这些问题。
答案 1 :(得分:3)
对我来说,将JAVA_HOME
添加到路径变量(Android Studio - &gt;偏好设置 - &gt;路径变量)中,然后重新启动Gradle守护程序,如上所述(./gradlew --stop
)就可以了。
在Mac上,您可以找到带有/usr/libexec/java_home -v 1.6
答案 2 :(得分:1)
切换回Gradle 1.10对我有用(在OS-X上)。 您可以编辑gradle-wrapper属性或在Android-Studio中配置本地gradle分发
答案 3 :(得分:1)
尝试在build.gradle文件中设置sourceCompatibility和targetCompatibility。对于Java 1.7,它应该如下所示:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}