首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector

RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector
EN

Stack Overflow用户
提问于 2016-01-13 12:43:23
回答 2查看 519关注 0票数 9

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

下面是堆栈跟踪

代码语言:javascript
复制
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更新到了下面,这是我错过的

代码语言:javascript
复制
<application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>
EN

回答 2

Stack Overflow用户

发布于 2016-01-23 15:34:51

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

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

这个错误会来,因为MultiDexApplication .I已经面临这种问题与一些其他库不相同的库,但一些其他library.It将错误的RoboGuice库,因为其初始化的应用程序启动其中的dex(其中您的RoboGuice库代码被转换为dex)文件是不设置(安装)。

为了解决这个问题,你需要处理多个Dex文件。借助build.gradleApplication class应用程序

以下是build.gradle文件中所需的更改

代码语言:javascript
复制
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

代码语言:javascript
复制
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.

}

如果您的应用程序使用扩展的应用程序类,您可以重写attachBaseContext()方法并调用MultiDex.install(this)来启用multidex。使用应扩展MultiDexApplication的应用程序类进行install multipledex file context

代码语言:javascript
复制
public class MyAppClass extends MultiDexApplication{
@Override
    protected void attachBaseContext(Context newBase) {
        MultiDex.install(newBase);
        super.attachBaseContext(newBase);
    }
}

如果有什么事就告诉我。

票数 3
EN

Stack Overflow用户

发布于 2016-01-20 19:09:03

我建议进行以下工作:

当在静态变量/对象初始化过程中抛出异常时,通过尝试运行带有的发布版本来删除未使用的函数和减少dex.

  1. java.lang.NoClassDefFoundError中的函数数量,
    1. 检查这是否是65k方法限制(multidex)问题。检查您是使用从RoboGuice类继承的/,还是将初始化代码与静态对象或代码块一起使用。问题可能出在那里。

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

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34758559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档