java - RoboGuice 3.0 NoClassDefFoundError : roboguice. 注入(inject).ContextScopedRoboInjector

标签 java android roboguice android-multidex

这并不总是可见,但在特定的 API 14 和 19 上可见。

下面是堆栈跟踪

java.lang.NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector
    at roboguice.RoboGuice.getInjector(RoboGuice.java:197)
    at roboguice.activity.RoboActivity.onCreate(RoboActivity.java:90)
    at com.bnmcombines.galleryflavors.Launcher.onCreate(Launcher.java:71)
    at android.app.Activity.performCreate(Activity.java:5343)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441)
    at android.app.ActivityThread.access$900(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
    at android.os.Handler.dispatchMessage(Handler.java:110)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:5345)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
    at dalvik.system.NativeStart.main(Native Method)

RoboGuice 3.0 已经记录了一个问题:https://github.com/roboguice/roboguice/issues/328

但没有回应,我们目前被封锁。

问题已解决

我提到了 MultiDex Document这次更加小心,并将我的 AndroidManifest.xml 更新到我错过的下方

<application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

最佳答案

来自您在回答中发布的 git 链接

在 API 级别 14 和 API 级别 19 设备上出现此错误。 在尝试搜索 Class 时,我发现此类可用,但仍然出现奇怪的 NoClassDefFoundException。这仅在某些情况下发生,并非总是如此

这个错误会因为MultiDexApplication而出现.我在其他一些库中遇到过这种问题,不是同一个库,而是其他一些库。它会导致 RoboGuice 库出错,因为它的应用程序启动启动时 dex(您的 RoboGuice 库代码在其中转换为 dex)文件是不要设置(安装)。

要解决您需要处理多个 Dex 文件的问题。在应用程序 build.gradleApplication class

的帮助下

build.gradle 文件中需要的更改

dexOptions {
        incremental true
        // here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY

        javaMaxHeapSize "4g"
    }


dependencies {
     compile 'com.android.support:multidex:1.0.1'
    //    your dependencies which you are using.

}

整个build.gradle

apply plugin: 'com.android.application'
repositories {
    mavenCentral()// for new android studio version it can be jcenter()

}
configurations {
//    all*.exclude group: 'com.android.support', module: 'recyclerview-v7'
}

android {
    signingConfigs {
        /*
        releasebuild {
            keyAlias 'hellotest'
            keyPassword 'hellotest'
            storeFile file('path to keystore')
            storePassword 'hellotest'
        }
        */
    }
    compileSdkVersion 'Google Inc.:Google APIs:22'
    buildToolsVersion '23.0.0'
    /* if you got error regarding duplicate file of  META-INF/LICENSE.txt from jar file
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
    */
    dexOptions {
        jumboMode = true
        incremental true
        // here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY

        javaMaxHeapSize "4g"
    }
    defaultConfig {
        multiDexEnabled true
        applicationId "com.myapp.packagenme"
        minSdkVersion 17
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releasebuild
        }
        debug {
            signingConfig signingConfigs.releasebuild
        }
    }
}

dependencies {
     compile 'com.android.support:multidex:1.0.1'
    //    your dependencies which you are using.

}

如果您的应用使用扩展 Application 类,您可以覆盖 attachBaseContext() 方法并调用 MultiDex.install(this) 以启用 multidex。install multipledex file context使用应扩展 MultiDexApplication 的 Applicaiton 类

public class MyAppClass extends MultiDexApplication{
@Override
    protected void attachBaseContext(Context newBase) {
        MultiDex.install(newBase);
        super.attachBaseContext(newBase);
    }
}

如果有的话请告诉我。

关于java - RoboGuice 3.0 NoClassDefFoundError : roboguice. 注入(inject).ContextScopedRoboInjector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758559/

相关文章:

java - Spring Batch 2.x 中的 BATCH_STEP_EXECUTION 中缺少 ITEM_COUNT 列

java - cometd 通过 websocket : "unknown bayeux transport"

android - 改造将多个图像上传到单个 key

android - 如何获取对象的属性

java - java的SecureRandom类中的getSeed()和generateSeed()函数之间的区别?

java - 如何在单击按钮时打开原生表情符号键盘?

java - 为 Fragment 中的对象赋值时出现问题

java - 如何在 roboguice 2.0 中注入(inject) LocationManager?

Android Roboguice 扩展一个 Robo 类的目的是什么?

java - 谁能帮我解决依赖注入(inject)问题?