超出了dagger2 GC开销限制

时间:2016-06-23 02:22:19

标签: android dependency-injection garbage-collection dagger-2 dagger

我正在关注 TODO 应用的 Dagger2 示例,但是使用了OutOfMemoryError:超出了GC开销限制。除此之外还有600多个警告:

警告:忽略没有关联的EnclosingMethod属性的匿名内部类(org.eclipse.osgi.internal.baseadaptor.BaseStorage $ StateSaver $ 1)的InnerClasses属性。这个类可能是由一个没有以现代.class文件格式为目标的编译器生成的。建议的解决方案是使用最新的编译器从源代码重新编译类,而不指定任何“-target”类型选项。忽略此警告的后果是,对此类的反射操作将错误地指示它不是*内部类。

这是我的代码:dagger2 cannot find symbol,我在gk5885的帮助下解决了我之前的问题。再次感谢你:-)。

在我将SharedPreferences sharedPreferences()添加到NetComponent并重建之后,程序将编译9分钟并最终抛出该错误。但是在没有 Dagger2 的情况下编译我的应用程序的先前版本的时间是秒,因此我非常确定 Dagger2 导致了这个错误。但我不知道为什么以及如何解决这个问题。

我的vm大小:-Xms256m -Xmx1280m。我认为这绰绰有余。

感谢任何帮助。

编辑:事实上,在我重建之前,我在apk错误中复制了重复文件。我通过在gradle中添加它来解决它:

packagingOptions {
        exclude 'META-INF/maven/com.google.guava/guava/pom.properties'
        exclude 'META-INF/maven/com.google.guava/guava/pom.xml'
    } 

也许我应该展示我的依赖关系:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'me.yokeyword:indexablestickylistview:0.6.1'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:recyclerview-v7:23.4.0'
    compile 'in.srain.cube:ultra-ptr:1.0.11'
    compile files('libs/ormlite-android-4.49-SNAPSHOT.jar')
    compile files('libs/ormlite-core-4.49-SNAPSHOT.jar')
    compile 'com.jakewharton:butterknife:8.1.0'
    apt 'com.jakewharton:butterknife-compiler:8.0.1'
    compile 'com.google.dagger:dagger:2.2' // dagger2
    compile 'com.google.dagger:dagger-compiler:2.2' // dagger2
    compile project(':ToggleButtonLib')
    compile project(':IMKit')
}

很抱歉这么多说明......

2 个答案:

答案 0 :(得分:1)

你应该改变

compile 'com.google.dagger:dagger-compiler:2.2' // dagger2 

apt 'com.google.dagger:dagger-compiler:2.2' // dagger2

因为您目前正在将整个dagger2编译器包含在您的项目中,其中包括Guava和各种各样的东西。

答案 1 :(得分:0)

在我的情况下杀死gradle,然后清理项目修复了问题。

执行./gradlew --stop,然后执行./gradlew clean