Android 4.4.2 取消混淆后友盟报错黑屏问题

查看:202
本文介绍了Android 4.4.2 取消混淆后友盟报错黑屏问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

最近公司项目考虑到混淆后线上bug不易查找,并且本就有使用360加固,就不做混淆了,但是我发现取消混淆后在android 4.4.2 (仅在这个版本会出现)的手机上跑不起来,启动黑屏几秒后闪退

错误日志

05-26 03:46:59.290 2511-2511/? I/dalvikvm: Failed resolving Lcom/umeng/analytics/d; interface 8796 'Lu/aly/v;'
05-26 03:46:59.290 2511-2511/? W/dalvikvm: Link of class 'Lcom/umeng/analytics/d;' failed
05-26 03:46:59.290 2511-2511/? E/dalvikvm: Could not find class 'com.umeng.analytics.d', referenced from method com.umeng.analytics.MobclickAgent.<clinit>
05-26 03:46:59.290 2511-2511/? W/dalvikvm: VFY: unable to resolve new-instance 7065 (Lcom/umeng/analytics/d;) in Lcom/umeng/analytics/MobclickAgent;
05-26 03:46:59.290 2511-2511/? D/dalvikvm: VFY: replacing opcode 0x22 at 0x0000

取消混淆,build配置

   buildTypes {
        release { //正式环境

//            minifyEnabled true  //minifyEnabled主要用来控制是否运行混淆的。
//            shrinkResources true //去掉无用的资源
//            zipAlignEnabled true //zip优化
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
            buildConfigField "boolean", "IS_DEBUG", "Boolean.parseBoolean(\"false\")"
        }
        debug {
            buildConfigField "boolean", "IS_DEBUG", "Boolean.parseBoolean(\"true\")"
        }
    }

开启混淆后就可以正常启动,或者不混淆,但是加固后也可以正常启动
网上搜了很久也找不到原因,求大神帮助

解决方案

找到原因了,是multiDex分包时 未在Application中做初始化导致的
在Application的继承类中

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);  ////这步分包必须要做,否则在android 4.4 及以下的机子上会出问题
    }

之所以在混淆和加固后没有出现问题,是因为混淆或者加固后缩减了无用代码,没有进行分包处理
至于版本问题,是因为Android 5.0 以及更高版本使用了一个叫做ART的运行时,它天生就支持从应用的apk文件中加载multiple dex文件。所以并没有出现问题
但是后来在了解multiple 时,还发现可能存在其他隐患
其实你不知道MultiDex到底有多坑

这篇关于Android 4.4.2 取消混淆后友盟报错黑屏问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆