RoboGuice 3.0的NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector [英] RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector

查看:369
本文介绍了RoboGuice 3.0的NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

下面是堆栈跟踪

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

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

但没有任何反应,我们正在阻止。

解决的问题

我提到 MultiDex文档更仔细这时间和更新了我的的Andr​​oidManifest.xml 来低于我错过了

 <应用
        ...
        机器人:名字=android.support.multidex.MultiDexApplication>
        ...
    < /用途>
< /清单>


解决方案

从git的链接,你的答案贴

获取有关API级别14和API等级19设备此错误。
在试图寻找类,我看到这个类是可用的,但仍然得到NoClassDefFoundException这是怪异。这只是在特定情况下发生的并不总是

这个错误会因为 MultiDexApplication 。我有面子此类问题与其他一些库不尽相同库但其他一些library.It将RoboGuice库的错误,因为它的应用程序的动初始化启动,其中地塞米松(你的RoboGuice库code转换为DEX)文件不设置(安装)。

要解决,你需要处理多个文件的地塞米松。与应用程序了的帮助的build.gradle &安培; 应用程序类

这是在的build.gradle 所需的更改如下文件

  dexOptions {
        真正的增量
        //这里堆的大小给予4克我得到这个东西从https://groups.google.com/forum/#​​!topic/adt-dev/P_TLBTyFWVY        javaMaxHeapSize4G
    }
依赖{
     编译com.android.support:multidex:1.0.1
    //你的依赖,你正在使用。}

整个的build.gradle

 应用插件:'com.android.application
库{
    mavenCentral()//新的Andr​​oid Studio版本也可以是jcenter()}
配置{
//所有* .exclude组:com.android.support',模块:'recyclerview-V7
}安卓{
    signingConfigs {
        / *
        releasebuild {
            keyAlias​​hellotest
            keyPasswordhellotest
            storeFile文件(路径密钥库)
            storePasswordhellotest
        }
        * /
    }
    compileSdkVersion谷歌Inc.:Google的API:22'
    buildToolsVersion '23 .0.0
    / *如果您关于从jar文件中META-INF / LICENSE.TXT的重复文件遇到错误
    packagingOptions {
        排除META-INF / LICENSE.TXT
    }
    * /
    dexOptions {
        jumboMode =真
        真正的增量
        //这里堆的大小给予4克我得到这个东西从https://groups.google.com/forum/#​​!topic/adt-dev/P_TLBTyFWVY        javaMaxHeapSize4G
    }
    defaultConfig {
        multiDexEnabled真
        的applicationIDcom.myapp.packagenme
        17的minSdkVersion
        targetSdkVersion 22
        版本code 1
        的versionName1.0
    }
    buildTypes {
        发布 {
            minifyEnabled假
            proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard-rules.pro
            signingConfig signingConfigs.releasebuild
        }
        调试{
            signingConfig signingConfigs.releasebuild
        }
    }
}依赖{
     编译com.android.support:multidex:1.0.1
    //你的依赖,你正在使用。}

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

 公共类MyAppClass扩展MultiDexApplication {
@覆盖
    保护无效attachBaseContext(上下文newBase){
        MultiDex.install(newBase);
        super.attachBaseContext(newBase);
    }
}

让我知道,如果任何事情。

This is not always seen but seen on particular API 14 and 19.

Below is the stacktrace

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)

Already an issue is logged with RoboGuice 3.0: https://github.com/roboguice/roboguice/issues/328

But no response and we are currently blocked.

Issue Resolved

I referred MultiDex Document more carefully this time and updated my AndroidManifest.xml to below that I had missed

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

解决方案

From the git link which you posted in answer

Getting this error on API Level 14 and API Level 19 devices. While trying to search for Class, I see that this class is available, but still getting NoClassDefFoundException which is weird. This is happening only under certain case not always

This error will come because of MultiDexApplication .I have face this kind of issue with some other library not same library but some other library.It will error of the RoboGuice library because its initilization of app start up where dex(in which your RoboGuice library code is converted to dex) file is not to set(install).

To resolve that you need to handle Multiple Dex file. with the help of applicaiton build.gradle & Application class

below changes which is required in build.gradle file

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.

}

Entire 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.

}

If your app uses extends the Applicationclass, you can override the attachBaseContext() method and call MultiDex.install(this) to enable multidex. To install multipledex file context using Applicaiton class which should extends MultiDexApplication

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

Let me know if anything.

这篇关于RoboGuice 3.0的NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆