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

标签 android git android-gradle-plugin android-multidex

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

只有当应用程序使用运行箭头尝试构建时才会发生这种情况,调用“rebuild”或“clean”时它会成功构建。

在线包含的一个解决方案是使用 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)是在声明监听器的时候。它最初是在另一个类中扩展点击监听器,所以我将它带入代码中,但这并没有帮助。

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

我最初认为问题出在充气机上,但现在我相当确定一定是使用了 multiDex。

multiDex 做了什么导致通货膨胀崩溃?

最佳答案

你需要做以下事情

  1. 在 build.gradle 中添加

    dexOptions {
        javaMaxHeapSize "4g"
    }
    
  2. 启用多索引

    defaultConfig {
        multiDexEnabled true
    }
    
  3. 使用 MultiDexApplication 创建一个文件扩展如下

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

    并将这个“App”类作为 list 中的应用程序类,如下所示 -

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

关于android - 为什么使用 multiDexEnabled (true) 允许应用程序构建但不断崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215662/

相关文章:

android - 找不到 gradle 2.2.0-rc1

android - 错误 :(26, 13) 无法解析 : com. android.support :appcompat-v7:25. 0.1

android - 如何设置android :networkSecurityConfig only to single flavor

android - 该属性未在基本 xml 属性上声明 (Android)

java - 在 Android ArrayList 上存储路径对象中的点

python - 使用 setup.py 从 git at tag 安装 python 包

git - git log -p 忽略文件

android - 显示高度为 'matchparent' 的图像并保持纵横比

java - Android String.split ("") 返回额外的元素

git - 在 Heroku 上使用带有 npm 和 Node 的 Git 依赖项