首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举字段上的ActiveAndroid NoClassDefFoundError异常

枚举字段上的ActiveAndroid NoClassDefFoundError异常
EN

Stack Overflow用户
提问于 2017-07-11 12:16:03
回答 1查看 379关注 0票数 1

它只在Galaxy和Android4.3上发生过一次。在带有枚举字段的Active Android中,是否存在已知的问题?谷歌没有帮上忙,我甚至不知道该往哪里看。

我必须提到我有multiDexEnabled=true,这可能就是为什么ActiveAndroid在这个奇怪的地方搜索类(my_app_name-1.apk)。

代码语言:javascript
复制
java.lang.NoClassDefFoundError: .../models/QuickAction$ActionType
at java.lang.Class.getDeclaredFields(Native Method)
at java.lang.Class.getDeclaredFields(Class.java:560)
at com.activeandroid.util.ReflectionUtils.getDeclaredColumnFields(ReflectionUtils.java:73)
at com.activeandroid.TableInfo.<init>(TableInfo.java:66)
at com.activeandroid.ModelInfo.loadModelFromMetaData(ModelInfo.java:101)
at com.activeandroid.ModelInfo.<init>(ModelInfo.java:61)
at com.activeandroid.Cache.initialize(Cache.java:66)
at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:44)
at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:34)
at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:30)
at com.activeandroid.app.Application.onCreate(Application.java:25)
at ...MyApplication.onCreate(MyApplication.java:12)
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)
Caused by: java.lang.ClassNotFoundException: Didn't find class "...models.QuickAction$ActionType" on path: DexPathList[[zip file "/data/app/...-1.apk"],nativeLibraryDirectories=[/data/app-lib/...-1, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    ... 24 more
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 14:32:04

按照MultiDex文档,您需要从应用程序中调用MultiDex.install(this)

通过附加从应用程序apk加载的额外dex文件来修补应用程序上下文类加载程序。

您可以通过扩展MultiDexApplication类来做到这一点:

代码语言:javascript
复制
public class MyApplication extends MultiDexApplication { ... }

或者,如果您有自己的自定义应用程序类,它已经扩展了其他内容,直接调用install

代码语言:javascript
复制
public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

为什么我们只需要对4.4及以下的人这样做呢?如果我们使用再看一遍医生,我们可以看到MultiDex支持内置于Android5.0 (L)和更高版本:

Android5.0(APILevel21)及更高版本使用称为ART的运行时,它本机支持从APK文件加载多个DEX文件。

实际上,如果我们进入MultiDex支持库,我们可以看到如果设备VM被认为“具有多重dex能力”,它就不会运行:

代码语言:javascript
复制
public static void install(Context context) {
    Log.i("MultiDex", "install");
    if(IS_VM_MULTIDEX_CAPABLE) {
        Log.i("MultiDex", "VM has multidex support, MultiDex support library is disabled.");
    } else if(VERSION.SDK_INT < 4) {
        throw new RuntimeException("Multi dex installation failed. SDK " + VERSION.SDK_INT + " is unsupported. Min SDK version is " + 4 + ".");
    } else {
        // Set up multidex
        ...
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45034364

复制
相关文章

相似问题

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