【发布时间】:2016-02-26 18:25:30
【问题描述】:
如果我从 AndroidStudio 运行我的 Robolectric 单元测试,一切都很好,我的所有测试都通过了。如果我尝试从命令行运行它们,“./gradlew clean test”会出现 OutOfMemoryError 错误。
我尝试过编辑项目根目录下的 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)
我尝试了answers from other threads,但没有成功。它似乎只在涉及 Activity 或 Fragment 时抛出错误。
【问题讨论】:
-
任何时候你提到一个异常被抛出,发布堆栈跟踪。
-
你有jdk7吗?我认为 AS 包含了 JDK8。你能升级你的JDK吗?
-
谢谢。这实际上修复了内存错误。我只剩下 java.lang.ClassNotFoundException。 1 个错误优于 2 个
-
附注这只是每个人在拥有使用 robolectric 的库(而不是应用程序)时都会遇到的标准问题。我应该可以从这里得到它。
标签: android gradle robolectric