RoboGuice 3.0 NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector

rsa*_*ale 9 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)
Run Code Online (Sandbox Code Playgroud)

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

但没有回应,我们目前被阻止.

问题解决了

这次我更仔细地提到了MultiDex Document,并将我更新AndroidManifest.xml到了我错过的下面

<application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

Fun*_*her 1

我建议做以下事情——

  1. 通过尝试使用 Proguard 运行发布版本来删除未使用的函数并减少 dex 中的函数数量,检查这是否是 65k 方法限制(multidex)问题。

  2. 当静态变量/对象初始化期间抛出异常时,也可能导致 java.lang.NoClassDefFoundError。检查您是否正在使用/继承 RoboGuice 类或使用具有静态对象或代码块的初始化代码。问题可能就出自那里。

另外,看看RoboGuice 3.0 NoClassDefFoundError: AnnotationDatabaseImpl,它可能会对您有所帮助(尽管用户收到的错误是关于另一个类的,但它们的初始化是静态对象的初始化)。

祝你好运。