为什么使用multiDexEnabled(true)允许应用程序构建但不断崩溃?

时间:2015-12-11 03:32:22

标签: android git android-gradle multidex android-multidex

我正在处理的应用程序(基本代码不是由我编写的,包含许多无法删除的大型库)。在最近的一次运行中,它开始响应消息:

仅当应用程序在使用运行箭头时尝试构建时才会发生这种情况,它在调用" rebuild"或"清洁"。

在线包含的解决方案是使用multiDexEnabled true(multiDex documentation here。)

使用这个我能够得到这两个"运行"箭头和"重建"。但是,构建并在手机上运行的应用程序崩溃时出现以下错误消息:

12-11 16:17:16.963 28868-28868/? D/dalvikvm: Late-enabling CheckJNI
12-11 16:17:17.023 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10471 (common_google_play_services_updating_text) in Lcom/google/android/gms/R$string;
12-11 16:17:17.023 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0021
12-11 16:17:17.023 28868-28868/com.myname.myappcoop I/dalvikvm: DexOpt: unable to optimize static field ref 0x28e8 at 0x2e in Lcom/google/android/gms/common/GoogleApiAvailability;.zza
12-11 16:17:17.033 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10465 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
12-11 16:17:17.033 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0012
12-11 16:17:17.033 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10462 (common_google_play_services_notification_ticker) in Lcom/google/android/gms/R$string;
12-11 16:17:17.033 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0013
12-11 16:17:17.033 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10437 (common_ic_googleplayservices) in Lcom/google/android/gms/R$drawable;
12-11 16:17:17.033 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0039
12-11 16:17:17.033 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10462 (common_google_play_services_notification_ticker) in Lcom/google/android/gms/R$string;
12-11 16:17:17.033 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0099
12-11 16:17:17.043 28868-28868/com.myname.myappcoop I/dalvikvm: Could not find method android.content.pm.PackageManager.getPackageInstaller, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zzj
12-11 16:17:17.043 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve virtual method 616: Landroid/content/pm/PackageManager;.getPackageInstaller ()Landroid/content/pm/PackageInstaller;
12-11 16:17:17.043 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x6e at 0x000b
12-11 16:17:17.043 28868-28868/com.myname.myappcoop I/dalvikvm: DexOpt: unable to optimize static field ref 0x28c4 at 0x6c in Lcom/google/android/gms/common/GooglePlayServicesUtil;.zza
12-11 16:17:17.043 28868-28868/com.myname.myappcoop I/dalvikvm: DexOpt: unable to optimize static field ref 0x28e9 at 0x6e in Lcom/google/android/gms/common/GooglePlayServicesUtil;.zza
12-11 16:17:17.083 28868-28907/com.myname.myappcoop I/GMPM: App measurement is starting up
12-11 16:17:17.083 28868-28907/com.myname.myappcoop E/GMPM: getGoogleAppId failed with status: 10
12-11 16:17:17.083 28868-28907/com.myname.myappcoop E/GMPM: Uploading is not possible. App measurement disabled
12-11 16:17:17.113 28868-28868/com.myname.myappcoop D/dalvikvm: GC_FOR_ALLOC freed 358K, 3% free 16887K/17276K, paused 11ms, total 12ms
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8714 (static_string) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x000b
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8710 (static_string2) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x000e
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8711 (static_string3) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0011
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8716 (static_string4) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0014
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8717 (static_string5) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0017
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8721 (static_string6) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x001a
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8720 (static_string7) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x001d
12-11 16:17:17.133 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 8719 (static_string8) in Lcom/myname/display/R$string;
12-11 16:17:17.133 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0020
12-11 16:17:17.143 28868-28868/com.myname.myappcoop D/MAIN: Context 1 : com.myname.myapp.Application@4268dfe8
12-11 16:17:17.163 28868-28868/com.myname.myappcoop E/dalvikvm: Could not find class 'com.myname.myapp.view.FalseActionBar$1', referenced from method com.myname.myapp.view.FalseActionBar.initializeView
12-11 16:17:17.163 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve new-instance 3015 (Lcom/myname/myapp/view/FalseActionBar$1;) in Lcom/myname/myapp/view/FalseActionBar;
12-11 16:17:17.163 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x22 at 0x002a
12-11 16:17:17.163 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10366 ($SwitchMap$com$myname$myapp$view$FalseActionBar$TitleMode) in Lcom/myname/myapp/view/FalseActionBar$3;
12-11 16:17:17.163 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x62 at 0x0005
12-11 16:17:17.163 28868-28868/com.myname.myappcoop D/dalvikvm: DexOpt: unable to opt direct call 0x5db9 at 0x2c in Lcom/myname/myapp/view/FalseActionBar;.initializeView
12-11 16:17:17.163 28868-28868/com.myname.myappcoop D/dalvikvm: DexOpt: unable to opt direct call 0x5dba at 0x46 in Lcom/myname/myapp/view/FalseActionBar;.initializeView
12-11 16:17:17.163 28868-28868/com.myname.myappcoop D/AndroidRuntime: Shutting down VM
12-11 16:17:17.163 28868-28868/com.myname.myappcoop W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4162fba8)
12-11 16:17:17.163 28868-28868/com.myname.myappcoop E/AndroidRuntime: FATAL EXCEPTION: main
                           Process: com.myname.myappcoop, PID: 28868
                           java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myname.myappcoop/com.myname.myapp.MainActivity}: android.view.InflateException: Binary XML file line #24: Error inflating class com.myname.myapp.view.FalseActionBar
                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
                               at android.app.ActivityThread.access$800(ActivityThread.java:135)
                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                               at android.os.Handler.dispatchMessage(Handler.java:102)
                               at android.os.Looper.loop(Looper.java:136)
                               at android.app.ActivityThread.main(ActivityThread.java:5001)
                               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:785)
                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                               at dalvik.system.NativeStart.main(Native Method)
                            Caused by: android.view.InflateException: Binary XML file line #24: Error inflating class com.myname.myapp.view.FalseActionBar
                               at android.view.LayoutInflater.createView(LayoutInflater.java:620)
                               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
                               at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
                               at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
                               at android.app.Activity.setContentView(Activity.java:1929)
                               at com.myname.myapp.MainActivity.onCreate(MainActivity.java:96)
                               at android.app.Activity.performCreate(Activity.java:5231)
                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                               at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                               at android.os.Looper.loop(Looper.java:136) 
                               at android.app.ActivityThread.main(ActivityThread.java:5001) 
                               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:785) 
                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                               at dalvik.system.NativeStart.main(Native Method) 
                            Caused by: java.lang.reflect.InvocationTargetException
                               at java.lang.reflect.Constructor.constructNative(Native Method)
                               at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
                               at android.view.LayoutInflater.createView(LayoutInflater.java:594)
                               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                               at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                               at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 
                               at android.app.Activity.setContentView(Activity.java:1929) 
                               at com.myname.myapp.MainActivity.onCreate(MainActivity.java:96) 
                               at android.app.Activity.performCreate(Activity.java:5231) 
                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                               at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                               at android.os.Looper.loop(Looper.java:136) 
                               at android.app.ActivityThread.main(ActivityThread.java:5001) 
                               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:785) 
                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                               at dalvik.system.NativeStart.main(Native Method) 
                            Caused by: java.lang.NoClassDefFoundError: com.myname.myapp.view.FalseActionBar$1
                               at com.myname.myapp.view.FalseActionBar.initializeView(FalseActionBar.java:61)
                               at com.myname.myapp.view.FalseActionBar.<init>(FalseActionBar.java:46)
                               at java.lang.reflect.Constructor.constructNative(Native Method) 
                               at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                               at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
                               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                               at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                               at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                               at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 
                               at android.app.Activity.setContentView(Activity.java:1929) 
                               at com.myname.myapp.MainActivity.onCreate(MainActivity.java:96) 
                               at android.app.Activity.performCreate(Activity.java:5231) 
                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                               at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                               at android.os.Looper.loop(Looper.java:136) 
                               at android.app.ActivityThread.main(ActivityThread.java:5001) 
                               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:785) 
                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                               at dalvik.system.NativeStart.main(Native Method) 
12-11 16:17:46.173 28868-28868/? I/Process: Sending signal. PID: 28868 SIG: 9

代码崩溃的位置(由:java.lang.NoClassDefFoundError:com.myname.myapp.view.FalseActionBar $ 1)是在声明侦听器时。它最初是在另一个在Click监听器上扩展的类中,所以我将它带入代码中,但这没有帮助。

    title.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            switch (mode) {
                case NONE:
                    //Nothing!
                    break;

                case BACK:
                    if(delegate != null){
                        delegate.goBack(backLocation);
                    }
                    break;

                case HOME:
                    if(delegate != null){
                        delegate.goHome();
                    }
                    break;
            }
        }

我原本以为问题出在inflater上,但现在我很确定它必须使用multiDex。

multiDex正在做什么导致通胀崩溃?

3 个答案:

答案 0 :(得分:8)

你需要做以下事情

    build.gradle中的
  1. 添加

    dexOptions {
        javaMaxHeapSize "4g"
    }
    
  2. 启用multidex

    defaultConfig {
        multiDexEnabled true
    }
    
  3. 使用MultiDexApplication创建扩展文件,如下所示

    public class App extends MultiDexApplication {
    
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        } 
    }
    

    并制作此应用程序&#39; class作为manifest中的应用程序类,如下所示 -

    <application
        android:name=".activity.App"
    

答案 1 :(得分:4)

添加

android:name="android.support.multidex.MultiDexApplication"

AndroidManifest.xml XM标记中application作为属性。

这将解决您的所有问题。

答案 2 :(得分:1)

希望你使用android studio。 尝试将此行添加到gradle文件并重新测试相同的

dexOptions {
        javaMaxHeapSize "4g"
    }