美文网首页
Android 使用第三方时白屏不显示?dex分包方法

Android 使用第三方时白屏不显示?dex分包方法

作者: GXT_Star | 来源:发表于2019-11-20 20:39 被阅读0次

最近遇到了使用第三方的时候不显示、白屏的情况,网上搜了好多解决办法,最后找到了这个,因为项目导包太多所导致的,通过下面方法解决了,给大家分享下

什么是dex?

Dex就是Dalvik VM executes的全称,可以认为是安卓虚拟机的可执行程序。

为什么用到分包 ?

大致可以分为2个原因。

  1. dex中包含的方法囊括了所有依赖的jar包和源码中的方法。在稍微大一些的项目中,这个方法数目是很可观的。而dex中表示方法数目的是short类型。所有最大只能表示到65536. 因此会出现一个dex无法保存所有方法的情况,此时需要分包。这里一般都是报错:
 Conversion to Dalvik format failed:
 Unable to execute dex: method ID not in [0, 0xffff]: 65536

或者其他类似的包含65536的错误。一般都是这个原因导致的。

  1. 还有一个情况是,方法数并没有达到上限,但是安装运行报错。因为在android虚拟机有一个optdex来优化dex,在优化过程中每个optdex都有固定大小的缓冲区。最初的时候3.0之前只有5m, 现在最大的好像是16m了。但是无论多大,如果出现了超过上限的情况也会报错。一般报错内容包含optde字样。

因此针对以上两种情况。需要使用分包机制。避开这些限制。

  • mutidex使用方法

目前安卓系统已经提供了可用的方法。以studio开发为例。

   defaultConfig {
        applicationId "com.example.demo"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 20180727
        versionName "8.0.8"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

首先在defaultConfig中添加mutilDexEnabled 为true。之后在dependependecies中添加依赖

api 'com.android.support:multidex:1.0.1'

添加完依赖之后有两种方法可以实现分包。

  1. 项目中的Application子类不要直接继承Application,而是继承MultiDexApplication。例如:
public class MyApp extends MultiDexApplication {
 
    @Override
    public void onCreate(){
        super.onCreate();
        EventBus eventBus = EventBus.builder().logNoSubscriberMessages(false)
                .sendNoSubscriberEvent(false).eventInheritance(false).build();
 
    }

2.如果不想修改Application的继承关系。那么可以复写applicaiton子类中的attachBaseContext方法:

    @Override
    protected void attachBaseContext(Context base){
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

原文链接

相关文章

  • Android 使用第三方时白屏不显示?dex分包方法

    最近遇到了使用第三方的时候不显示、白屏的情况,网上搜了好多解决办法,最后找到了这个,因为项目导包太多所导致的,通过...

  • Android Dex分包

    最近项目apk方法数即将达到65536上限,虽然通过瘦身减少了一些方法数,但是随着更多sdk的接入,终究还是避免不...

  • android dex分包

    最简单的dex demo from http://blog.csdn.net/u013478336/article...

  • android dex 分包

    1、添加依赖 在module下的build.gradle文件 ,defaultConfig 节点中添加multiD...

  • Android Dex分包

    1.为什么要分包? 65536问题 导致因素随着项目apk的庞大以及加入更多的第三方库,app的方法数已经超过了6...

  • android分包

    前言 只有android5.0之前需要解决分包问题,5.0之后dex在apk安装的时候汇总,启动时不存在分包问题。...

  • Android Dex分包—Gradle方式

    上篇文章讲到了ant方式进行dex分包《Android Dex分包》,本篇文章再来看一下采用gradle方式进行d...

  • dex分包方法

  • 关于Tinker热修复

    Android 应用的Dex有64K引用限制,超过限制后就不得不优化工程代码将方法数限制在64K以内或者使用分包方...

  • Android Dex分包原理

    为什么要分包? 1、65536问题 导致因素随着项目apk的庞大以及加入更多的第三方库,app的方法数已经超过了6...

网友评论

      本文标题:Android 使用第三方时白屏不显示?dex分包方法

      本文链接:https://www.haomeiwen.com/subject/eijaictx.html