致命异常:主要java.lang.NoClassDefFoundError:org.andengine.engine.options.SoundOptions

时间:2015-06-18 11:17:51

标签: android android-studio andengine eclipse-adt

我在eclipse中有一个现有的andengine项目,我迁移到了Android Studio。 gradle显示没有错误,我能够成功构建apk。但每当我在手机上打开/运行apk时,它会在开头时因上述错误而崩溃。我已经通过在这里和那里阅读了很多随机的东西但是我们无法理解这个问题。

以下是我从logcat获得的详细错误。我可以注意到的是FATAL EXCEPTION:main java.lang.NoClassDefFoundError:org.andengine.engine.options.SoundOptions

所以andengine不会在运行时找到SoundOptions和其他类。

这是我的onCreateEngineOptions代码,它显示崩溃。如果您需要我身边的任何其他信息,请告诉我。

@Override
    public EngineOptions onCreateEngineOptions() {
        abc();
        prefs = this.getSharedPreferences(
                "MY_PACKAGE", Context.MODE_PRIVATE);
        camera = new FollowCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
        EngineOptions engineOption = new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, new FillResolutionPolicy(), camera);
        engineOption.getAudioOptions().setNeedsMusic(true);
        engineOption.getAudioOptions().setNeedsSound(true);
        engineOption.getRenderOptions().getConfigChooserOptions().setRequestedMultiSampling(true);
        engineOption.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
        engineOption.getTouchOptions().setNeedsMultiTouch(true);
        return engineOption;
    }

这是我的build.gradle(module:app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'
    defaultConfig {
        applicationId "MY_PACKAGE"
        minSdkVersion 9
        targetSdkVersion 22
        multiDexEnabled true
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = [] //disable automatic ndk-build call
    }
    productFlavors {
    }
}
repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.google.android.gms:play-services:7.5.0'
    compile project(':BaseGameUtils')
    compile project(':facebook')
    compile project(':AndEngine')
    compile project(':andEnginePhysicsBox2D')
}

日志:

06-18 16:22:03.761  14042-14042/? E/NetworkScheduler.SchedulerReceiver﹕ Invalid parameter app
06-18 16:22:03.771  14042-14042/? E/NetworkScheduler.SchedulerReceiver﹕ Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
06-18 16:22:05.453    4974-4974/? E/dalvikvm﹕ Could not find class 'android.app.Notification$Action$Builder', referenced from method b.a
06-18 16:22:05.623    4974-4974/? E/dalvikvm﹕ Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method b.a
06-18 16:22:06.033    4974-4974/? E/dalvikvm﹕ Could not find class 'android.app.Notification$Action$Builder', referenced from method b.a
06-18 16:22:06.133    4974-4974/? E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method b.a
06-18 16:22:06.133    4974-4974/? E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method b.a
06-18 16:22:06.143    4974-4974/? E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method b.a
06-18 16:22:06.334    4974-4974/? E/dalvikvm﹕ Could not find class 'android.app.RemoteInput[]', referenced from method b.a
06-18 16:22:06.394    4974-4974/? E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method b.b
06-18 16:22:14.932    5041-5148/MY_PACKAGE E/dalvikvm﹕ Could not find class 'android.app.AppOpsManager', referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zza
06-18 16:22:14.962    5041-5148/MY_PACKAGE E/GooglePlayServicesUtil﹕ The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
06-18 16:22:15.022    5041-5148/MY_PACKAGE E/dalvikvm﹕ Could not find class 'com.google.android.gms.ads.identifier.AdvertisingIdClient$zza', referenced from method com.google.android.gms.ads.identifier.AdvertisingIdClient.zzaJ
06-18 16:22:15.052    5041-5148/MY_PACKAGE E/GooglePlayServicesUtil﹕ The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
06-18 16:22:15.282    5041-5041/MY_PACKAGE E/dalvikvm﹕ Could not find class 'org.andengine.engine.handler.UpdateHandlerList', referenced from method org.andengine.engine.camera.Camera.allocateUpdateHandlers
06-18 16:22:15.613    5041-5041/MY_PACKAGE E/dalvikvm﹕ Could not find class 'org.andengine.engine.options.SoundOptions', referenced from method org.andengine.engine.options.AudioOptions.<init>
06-18 16:22:15.793    5041-5041/MY_PACKAGE E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: org.andengine.engine.options.SoundOptions
            at org.andengine.engine.options.AudioOptions.<init>(AudioOptions.java:18)
            at org.andengine.engine.options.EngineOptions.<init>(EngineOptions.java:32)
            at MY_PACKAGE.GameActivity.onCreateEngineOptions(GameActivity.java:209)
            at org.andengine.ui.activity.BaseGameActivity.onCreate(BaseGameActivity.java:82)
            at MY_PACKAGE.GameActivity.onCreate(GameActivity.java:289)
            at android.app.Activity.performCreate(Activity.java:4538)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
            at android.app.ActivityThread.access$600(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:156)
            at android.app.ActivityThread.main(ActivityThread.java:4987)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
06-18 16:22:15.843    1601-5647/? E/EmbeddedLogger﹕ App crashed! Process: MY_PACKAGE
06-18 16:22:15.843    1601-5647/? E/EmbeddedLogger﹕ App crashed! Package: MY_PACKAGE v1 (1.0)
06-18 16:22:15.843    1601-5647/? E/EmbeddedLogger﹕ Application Label: MY_APP_LABEL

2 个答案:

答案 0 :(得分:1)

您的项目是否已达到65k +方法(dex限制)?您似乎已在build.gradle中启用了multidex。但这样做不足以支持multidex,您需要在Application类中扩展MultidexApplication

public class YourApplication extends MultiDexApplication {

.

.

此外,您还需要在build.gradle中指定对multidex lib的依赖性

compile 'com.android.support:multidex:1.0.0'

你做过这个吗?

有关详细信息,请参阅此文档 https://developer.android.com/tools/building/multidex.html

答案 1 :(得分:1)

问题可能来自multiDex功能。禁用它,并尝试减少项目中的方法数量。 Google Play服务有很多,您可以尝试更精细地使用该库(例如,拆分为更小的模块,并仅使用您真正需要的模块)。在this guide

之后,Il将花费大约30秒