2017-07-11 9 views
1

Android 4.3搭載のGalaxy Nexusで1回しか発生しませんでした。 アクティブなAndroidに列挙型フィールドに関する既知の問題がありますか? Googleは助けてくれなかったし、どこを見てもわからない。ActiveAndroid列挙型フィールドNoClassDefFoundError例外

私は私は=真multiDexEnabledていることを言及しなければならない、そしてそれはおそらく、この奇妙なスポットでActiveAndroid検索クラス(my_app_name-1.apk)を1として

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 
+0

あなたは、署名されたAPKを使用していますか? –

+1

あなたはproguardを使用していますか?あなたのアプリケーションで 'MultiDex.install(this);'を呼び出しましたか? –

+0

check https://stackoverflow.com/a/33430306/3395198 –

答えて

1

MultiDex documentationあなたがMultiDex.install(this)を呼び出す必要が理由です

アプリケーションapkから追加のdexファイルを追加して、アプリケーションコンテキストクラスローダーにパッチを適用します。

public class MyApplication extends SomeOtherApplication { 
    @Override 
    protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
    } 
} 
:あなたが直接 installを呼び出すことによって、すでに何かを拡張し、独自のカスタムアプリケーションのクラスを持っている場合は、

public class MyApplication extends MultiDexApplication { ... } 

または:あなたはMultiDexApplicationクラスを拡張していずれか、これを行うことができ

なぜ4.4以下でこれを行うだけですか?我々look at the docs againなら、私たちはMultiDexサポートがビルトインされていることのAndroid 5.0(L)とに見ることができ、より高い:

のAndroid 5.0(APIレベル21)と高いがネイティブから複数のDEXファイルをロードサポートランタイムと呼ばれるARTを使用しています

APKファイル。実際

、我々はMultiDexサポートライブラリにステップた場合、デバイスVMは、「可能なマルチDEX」と見なされた場合、我々はそれなし-OPSことを確認することができます。

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