从gradle运行机器人分子测试会产生OutOfMemoryError。AndroidStudio很好

从gradle运行机器人分子测试会产生OutOfMemoryError。AndroidStudio很好,android,gradle,robolectric,Android,Gradle,Robolectric,如果我从AndroidStudio运行我的机器人分子单元测试,一切都很好,所有测试都通过了。如果我试着从命令行“./gradlew clean test”运行它们,我会发现内存错误 我尝试过在项目的根目录中编辑gradle.properties文件,但似乎没有效果。我甚至将内存限制设置为8g,但仍然存在内存不足错误,所以我认为该文件不会有任何影响 项目->gradle.properties # Specifies the JVM arguments used for the daemon pro

如果我从AndroidStudio运行我的机器人分子单元测试,一切都很好,所有测试都通过了。如果我试着从命令行“./gradlew clean test”运行它们,我会发现内存错误

我尝试过在项目的根目录中编辑gradle.properties文件,但似乎没有效果。我甚至将内存限制设置为8g,但仍然存在内存不足错误,所以我认为该文件不会有任何影响

项目->gradle.properties

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# https://stackoverflow.com/questions/17012619/android-studio-gradle-issue-outofmemoryerror-permgen-space
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
堆栈跟踪

objc[18543]: Class JavaLaunchHelper is implemented in both     /Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.

com.foo.android.ui.MapControllerFragmentTest > testSomething FAILED
java.lang.NoClassDefFoundError at MapControllerFragmentTest.java:92
    Caused by: java.lang.ClassNotFoundException at MapControllerFragmentTest.java:92

com.foo.android.ui.MapFragmentTest > testGoogleMapListenersRemovedOnDestroy FAILED
java.lang.OutOfMemoryError

com.foo.android.ui.MapFragmentTest > testLifecyclesPassedToMapView FAILED
java.lang.NoClassDefFoundError at MapFragmentTest.java:37

Unexpected exception thrown.
java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:113)
at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:331)
at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1376)

我试过这个方法,但没有成功。它似乎只有在涉及活动或片段时才会抛出错误

Eugen是正确的。一旦我更新到JDK 8,我的内存不足错误就消失了

解决了这个问题后,我剩下的一个问题是每个人在从图书馆运行Robolectric时都会面临:它找不到资源。许多人建议把所有的文件都复制过来。对我来说,这就像在gradle中设置src目录一样简单

android {
....
    sourceSets {
    // a work around for robolectric
    // https://github.com/robolectric/robolectric/issues/1796
    test.java.srcDirs += '../App/build/generated/source/r/debug'
}

尤金是对的。一旦我更新到JDK 8,我的内存不足错误就消失了

解决了这个问题后,我剩下的一个问题是每个人在从图书馆运行Robolectric时都会面临:它找不到资源。许多人建议把所有的文件都复制过来。对我来说,这就像在gradle中设置src目录一样简单

android {
....
    sourceSets {
    // a work around for robolectric
    // https://github.com/robolectric/robolectric/issues/1796
    test.java.srcDirs += '../App/build/generated/source/r/debug'
}

每当您提到抛出异常时,都要发布堆栈跟踪。您有jdk7吗?我认为JDK8公司也是如此。你能升级你的JDK吗?谢谢。这实际上修复了内存错误。我只剩下java.lang.ClassNotFoundException。1个错误比2个错误好。这正是每个人在拥有一个使用robolectric的库(而不是应用程序)时遇到的标准问题。我应该可以从这里得到它。任何时候你提到一个异常被抛出,发布堆栈跟踪。你有jdk7吗?我认为JDK8公司也是如此。你能升级你的JDK吗?谢谢。这实际上修复了内存错误。我只剩下java.lang.ClassNotFoundException。1个错误比2个错误好。这正是每个人在拥有一个使用robolectric的库(而不是应用程序)时遇到的标准问题。我应该可以从这里拿到。