NoClassDefFoundError:com.parse.ParseObject $ 1

时间:2016-01-14 00:02:22

标签: java android parse-platform noclassdeffounderror

我在Android 4.4,4.3和4.2上遇到NoClassDefFoundError。我整天都试着修理它无济于事。我已经尝试更改targetSdkVersion,Parse版本,使用jar而不是Gradle导入Parse库,以及清理和重建项目。一切都适用于Android 5.0及更高版本。

我正在使用Parse版本1.12.0

CompileSdkVersion 23

buildToolsVersion 23.0.2

minSdkVersion 17

targetSdkVersion 23

这是我的堆栈跟踪。它首次尝试注册ParseObject的子类时崩溃。

          01-13 12:18:26.500 1347-1347/? E/AndroidRuntime: FATAL EXCEPTION: main
         java.lang.NoClassDefFoundError: com.parse.ParseObject$1
             at com.parse.ParseObject.<clinit>(ParseObject.java:316)
             at com.company.myapp.utils.Application.onCreate(PensterApplication.java:36)
             at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
             at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4444)
             at android.app.ActivityThread.access$1300(ActivityThread.java:141)
             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
             at android.os.Handler.dispatchMessage(Handler.java:99)
             at android.os.Looper.loop(Looper.java:137)
             at android.app.ActivityThread.main(ActivityThread.java:5103)
             at java.lang.reflect.Method.invokeNative(Native Method)
             at java.lang.reflect.Method.invoke(Method.java:525)
             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
             at dalvik.system.NativeStart.main(Native Method)

这是它崩溃的Application类。 我已将类名改为在线发布

  public class myApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            FacebookSdk.sdkInitialize(this);

            // Enable Local Datastore.
            Parse.enableLocalDatastore(this);

            // Parse classes that need registering
            ParseObject.registerSubclass(aaa.class); //error happens here
            ParseObject.registerSubclass(bbb.class);
            ParseObject.registerSubclass(ccc.class);
            ParseObject.registerSubclass(ddd.class);
            ParseObject.registerSubclass(eee.class);
            ParseObject.registerSubclass(fff.class);
            ParseObject.registerSubclass(ggg.class);
            ParseObject.registerSubclass(hhh.class);
            ParseObject.registerSubclass(iii.class);
            ParseObject.registerSubclass(jjj.class);
            Parse.initialize(this, PARSE_APPLICATION_ID, PARSE_CLIENT_KEY);

            //set a default acl so that default is not public read.write
            if (ParseUser.getCurrentUser() != null) {
                ParseACL defaultACL = new ParseACL(ParseUser.getCurrentUser());
                defaultACL.setPublicReadAccess(false);
                defaultACL.setPublicWriteAccess(false);
                ParseACL.setDefaultACL(defaultACL, true);
            }

            // Save this installation
            ParseInstallation.getCurrentInstallation().saveInBackground();
            ParseFacebookUtils.initialize(this);
            ParseTwitterUtils.initialize(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);

        }
    }

任何想法出了什么问题都会非常感激。

2 个答案:

答案 0 :(得分:1)

我从他们的github回购的友好解析人那里得到了一些帮助。

我的问题: https://github.com/ParsePlatform/Parse-SDK-Android/issues/342

我的问题引用的问题: https://github.com/ParsePlatform/Parse-SDK-Android/issues/213

引用问题引用的堆栈溢出问题。 (这是帮助我解决问题的原因。) Crash: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout

原来这是multidex的一个问题。我需要扩展MultiDexApplication而不是Application。我还为我的proguard规则添加了一些内容。

答案 1 :(得分:0)

这可能是由以下原因引起的:

  1. aaa(可能是ParseObject的子类)使用版本ParseObject构建,与部署的库版本不同,或者
  2. myApplication使用的版本ParseObject与已部署的库版本不同。
  3. 后者更有可能。