RoboGuice 3.0的NoClassDefFoundError:roboguice.inject.ContextScopedRoboInjector [英] 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文档更仔细这时间和更新了我的的AndroidManifest.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()//新的Android Studio版本也可以是jcenter()}
配置{
//所有* .exclude组:com.android.support',模块:'recyclerview-V7
}安卓{
signingConfigs {
/ *
releasebuild {
keyAliashellotest
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屋!