RoboGuice 3.0 NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector

这并不总是可见,但在特定的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已经logging了一个问题: https : //github.com/roboguice/roboguice/issues/328

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

问题解决了

这次我更仔细地介绍了MultiDex Document,并将我的AndroidManifest.xml更新到了我以前错过的版本

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

Solutions Collecting From Web of "RoboGuice 3.0 NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector"

从你在回答中发布的git链接

在API级别14和API级别19设备上获取此错误。 在尝试searchClass时,我发现这个类是可用的,但仍然得到了奇怪的NoClassDefFoundException。 这只是在某些情况下并不总是如此

这个错误是由于MultiDexApplication引起的 。我遇到过这样的问题,其他一些库不是一样的库,而是一些其他库。它会错误的RoboGuice库,因为它启动的应用程序启动在dex(其中你的RoboGuice库代码是转换为dex)文件是不是设置(安装)。

要解决您需要处理多个Dex文件。 借助应用程序build.gradleApplication class

下面是build.gradle文件中所需的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. } 

如果您的应用程序使用扩展了Applicationclass,则可以覆盖attachBaseContext()方法并调用MultiDex.install(this)以启用multidex。 使用应扩展MultiDexApplication类来安装multipledex文件上下文

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

让我知道,如果有的话。

我build议做以下事情 –

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

  2. 在静态variables/对象初始化期间抛出exception时,也会导致java.lang.NoClassDefFoundError。 检查您是使用从RoboGuice类inheritance的/或从静态对象或代码块使用初始化代码。 问题可能来自那里。

此外,看看RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl ,它可以帮助你(尽pipe用户正在得到的错误是关于另一个类,他们初始化是一个静态对象)。

祝你好运。