首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Multidex记录一:介绍和使用

记录Multidex介绍和使用 为什么要用记录呢,因为我从开始接触Android时我们的项目就在65535的边缘。不久Google就出了multidex的解决方案。...ART 在应用安装时执行预编译,扫描 classesN.dex 文件,并将它们编译成单个 .oat 文件,供 Android 设备执行。...java.lang.NoClassDefFoundError 为 Dalvik 可执行文件分包构建每个 DEX 文件时,构建工具会执行复杂的决策制定来确定主要 DEX 文件中需要的类,以便应用能够成功启动...如果启动期间需要的任何类未在主 DEX 文件中提供,那么您的应用将崩溃并出现错误 java.lang.NoClassDefFoundError。...该情况不应出现在直接从应用代码访问的代码上,因为构建工具能识别这些代码路径,但可能在代码路径可见性较低(如使用的库具有复杂的依赖项)时出现。

1.7K10

Android 项目开发填坑记 - 使用 MultiDex 解决 64K 限制

参考资料:Configure Apps with Over 64K Methods 可能遇到的问题 NoClassDefFoundError Android SDK Build Tools 21.1...或者更高版本中的 Gradle Android 插件有对 multidex 的支持。...然后,比较重要的一步就是:通过友盟、测试记录、Bug记录等获取到 NoClassDefFoundError 错误对应的类,按照 maindexlist.txt 文件的方式添加这些类到 multidex.keep...其他错误和问题 比如首次安装启动时黑屏没有响应/ANR、安装时异常等,你可以参考文末的一些文章,此外你还可以参考 Android 必知必会-Android Splash 页秒开之细节处理 来优化启动体验...参考资料和推荐阅读: Android Multidex 遇到的问题 (推荐此文) Android的multidex带来的性能问题-减慢app启动速度 ClassNotFoundException 总结

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学(kao)习(bei)官方关于64k异常处理 ^_^

    ART 在应用安装时执行预编译,扫描 classesN.dex 文件,并将它们编译成单个 .oat 文件,供 Android 设备执行。...注:如果将应用的 minSdkVersion 设置为 21 或更高值,使用 Instant Run 时,Android Studio 会自动将应用配置为进行 Dalvik 可执行文件分包。...如果APP目标 API 级别低于 14,请务必针对这些版本的平台进行测试,因为应用可能会在启动时或加载特定类群时出现问题。...如果启动期间需要的任何类未在主 DEX 文件中提供,那么应用将崩溃并出现错误 java.lang.NoClassDefFoundError。...该情况不应出现在直接从应用代码访问的代码上,因为构建工具能识别这些代码路径,但可能在代码路径可见性较低(如使用的库具有复杂的依赖项)时出现。

    97620

    Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^

    ART 在应用安装时执行预编译,扫描 classesN.dex 文件,并将它们编译成单个 .oat 文件,供 Android 设备执行。...注:如果将应用的 minSdkVersion 设置为 21 或更高值,使用 Instant Run 时,Android Studio 会自动将应用配置为进行 Dalvik 可执行文件分包。...如果APP目标 API 级别低于 14,请务必针对这些版本的平台进行测试,因为应用可能会在启动时或加载特定类群时出现问题。...如果启动期间需要的任何类未在主 DEX 文件中提供,那么应用将崩溃并出现错误 java.lang.NoClassDefFoundError。...该情况不应出现在直接从应用代码访问的代码上,因为构建工具能识别这些代码路径,但可能在代码路径可见性较低(如使用的库具有复杂的依赖项)时出现。

    83410

    Android Dex分包最全总结:含Facebook解决方案

    当程序越来越大之后,出现了一个 dex 包装不下的情况,通过 MultiDex 的方法解决了这个问题,但是在低端机器上又出现了 INSTALL_FAILED_DEXOPT 的情况,那再解决这个问题吧。...解决 65536 Google MultiDex 解决方案: 在 gradle 中添加 MultiDex 的依赖: dependencies { compile 'com.android.support...dexopt 当 Android 系统安装一个应用的时候,有一步是对 Dex 进行优化,这个过程有一个专门的工具来处理,叫 DexOpt。...dex 形式 第一,为了能够继续支持 Android 2.x 的机型,我们将每个包的方法数控制在 48000 个,这样最后分出来 dex 包大约在 5M 左右;第二,为了防止 NoClassDefFoundError...我们先判断是否第一次安装启动应用,当应用不是第一次安装启动时,我们直接启动闪屏页,并且结束掉子进程即可。 Q3:处于第一次安装成功之后,app收到推送全家桶是否会被唤醒?

    3K20

    Multidex记录二:缺陷&解决

    记录Multidex缺陷&解决 为什么要用记录呢,因为我从开始接触Android时我们的项目就在65535的边缘。不久Google就出了multidex的解决方案。...Multidex的缺陷 Multidex介绍和使用 中已经说了一部分multidex的局限性: 1、在冷启动时因为需要安装DEX文件,如果DEX文件过大时,处理时间过长,很容易引发ANR(Application...Not Responding); 2、采用MultiDex方案的应用可能不能在低于Android 4.0 (API level 14) 机器上启动,这个主要是因为Dalvik linearAlloc的一个...,这个限制在 Android 4.0 (API level 14)已经增加了, 应用也有可能在低于 Android 5.0 (API level 21)版本的机器上触发这个限制。...局限性:第一个dex必须包含所有可能启动之后ClassLoader的类,不然一定会产生NoClassDefFoundError异常。

    1.1K10

    dex分包变形记

    一、背景 就在项目灰度测试前不久,爆出了在 Android 3.0以下手机上安装时出现 INSTALL _ FAILED_DEXOPT,导致安装失败。...官方文档上只提供了如何使用 MultiDex,没有说明构建时如何打包出多个 dex。...这种方法优点是配置比较简单,但是最大的缺点是不能指定哪些类必须包含在主 dex 中,容易导致应用启动时某些类找不到,出现 Class Not Found Exception。...3.安装运行 我们把分包后的 apk 在 Android 4.3的手机上进行安装。没有问题,顺利安装上了! 没想到的是,启动时没出现任何页面,直接 crash。Crash 的 log 如下: ?...但是仅有这些入口类放在主 dex 还不够,还要找出入口类引用的其他类,不然仍然会在启动时出现 NoClassDefFoundError。

    1.7K110

    面试官:今日头条启动很快,你觉得可能是做了哪些优化?

    讲启动优化之前,先看下应用的启动流程 一、应用启动流程 应用进程不存在的情况下,从点击桌面应用图标,到应用启动(冷启动),大概会经历以下流程: Launcher startActivity AMS startActivity...二、启动优化 直奔主题,常见的启动优化方式大概有这些: 闪屏页优化 MultipDex优化(本文重点) 第三方库懒加载 WebView优化 线程优化 系统调用优化 2.1 闪屏页优化 消除启动时的白屏/...,目前大部分应用应该还是会兼容5.0以下手机,那么MultiDex优化是冷启动优化的大头。...[image] 报错NoClassDefFoundError,一般都是该类没有在主dex中,要在maindexlist.txt 将配置指定在主dex。...* * * Android架构设计原理与实战——Jetpack结合MVP组合应用开发一个优秀的APP!

    1.1K30

    你必须要掌握的Android冷启动优化

    在官方文档中描述到当冷启动在5秒或者更长的时,Android vitals就会认为你的应用需要进行冷启动相关的优化。...想必大家都会发现,自从我们方法数超出了65535处理了分包之后,启动白屏/黑屏的问题就出现了,分包机制是导致冷启动缓慢的重要原因,而现在部分应用采用插件化的方式来避免MultiDex带来的白屏问题,这虽然是一种方法...我们来聊一下MultiDex优化,首先MultiDex可分成运行时和编译时两个部分: 编译期:将App中的class以某种策略拆分在多个dex中,为了减少第一个dex也就主dex中包含的class数;...启动优化文章,但是大家要注意在主dex的分包过程中,主dex经过我们一系列的优化操作减少了主dex的大小,因此也增大了NoClassDefFoundError的异常的可能,此时会导致我们的应用启动失败的风险...冷启动优化总结 对于冷启动优化,需要我们一步步去分析,不像布局优化那般照搬套路,所以在官方文档中也多次出现bottleneck瓶颈这个词汇,说明了我们的冷启动优化之路不会一马平川,大家要善用Android

    1.8K20

    Android dex文件64k限制解决办法

    这些变化,除了会导致打包出的 APK 文件越来越大之外,当项目中java代码包含的方法数(method count)超出一个峰值时,编译过程中就会出现如下错误: 较早版本的编译系统中,错误内容如下: Conversion...为了解决 64K 方法数限制的问题,我们可以在项目中使用 multidex 配置,当项目中的方法数(包括:Android framework,library 和我们自己写的代码)超过 64K 时,编译系统会自动编译出多个...注意:由于 Instant Run 机制利用的就是 multidex 原理,当项目中minSdkVersion参数设置为20或者更小,并且运行在 Android 4.4 (API 20) 或更低版本的设备中时...注意:使用Instant Run时,如果项目中的minSdkVersion参数设为21或更高版本,Android Studio编译运行时会自动使应用支持multidex。...作为编译配置的一部分,所以确保我们的Android SDK Build Tools tools已经更新至21.1或更高版本,然后再来配置应用的multidex部分。

    1.2K20

    闲聊MultiDex

    MultiDex 是什么? 当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。...MultiDex 的局限性 Dalvik 可执行文件分包支持库具有一些已知的局限性,将其纳入您的应用构建配置之中时,您应该注意这些局限性并进行针对性的测试: • 启动期间在设备数据分区中安装 DEX...如果您的目标 API 级别低于 14,请务必针对这些版本的平台进行测试,因为您的应用可能会在启动时或加载特定类群时出现问题。代码压缩可以减少甚至有可能消除这些潜在问题。...现在应该不存在哪个应用丧心病狂地向下兼容适配到 Android 2.X 了吧?...Reference 配置方法数超过 64K 的应用 类加载机制系列3——MultiDex原理解析 Android使用Multidex突破64K方法数限制原理解析 其实你不知道MultiDex到底有多坑

    92510

    闲聊MultiDex

    MultiDex 是什么? 当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。...MultiDex 的局限性 Dalvik 可执行文件分包支持库具有一些已知的局限性,将其纳入您的应用构建配置之中时,您应该注意这些局限性并进行针对性的测试: • 启动期间在设备数据分区中安装 DEX...如果您的目标 API 级别低于 14,请务必针对这些版本的平台进行测试,因为您的应用可能会在启动时或加载特定类群时出现问题。代码压缩可以减少甚至有可能消除这些潜在问题。...现在应该不存在哪个应用丧心病狂地向下兼容适配到 Android 2.X 了吧?...Reference 配置方法数超过 64K 的应用 类加载机制系列3——MultiDex原理解析 Android使用Multidex突破64K方法数限制原理解析 其实你不知道MultiDex到底有多坑

    1K10

    Art of Android Development Reading Notes 13

    有时方法数没有超过最大值,但是安装在低版本手机上时应用异常终止了,报错Optimization failed。...在Android 5.0之前使用multidex需要引入android-support-multidex.jar包,从Android 5.0开始,系统默认支持了multidex,它可以从apk中加载多个...(3)Multidex方案可能带来的问题: 1.应用启动速度会降低,因为应用启动的时候会加载额外的dex文件,所以要避免生成较大的dex文件; 2.需要做大量的兼容性测试,因为Dalvik LinearAlloc...的bug,可能导致使用multidex的应用无法在Android 4.0以前的手机上运行。...如果5s内没有响应屏幕触摸事件或者键盘输入事件就会ANR,而BroadcastReceiver如果10s内没有执行完操作也会出现ANR。

    54820

    MultiDex(一)之源码解析

    一、初识MultiDex 开发Android应用的小伙伴,在经历了众多版本迭代、PM不断加入新功能、尝试新技术引入类库之后,产物Apk急剧膨胀;最终会遇到那个传说中的Android64K方法数问题;具体表现...但是只解决分Dex打包的问题还不够,我们知道Dalvik虚拟机应用启动时默认只会装载classes.dex,那ClassLoader肯定是无法从别的Dex中查找Class的,从而程序运行过程中的各种ClassNotFoundException...看最新MultiDex库文件Master分支的代码:获取缓存Dex目录的时候出现过,如果正常缓存目录创建失败,则data/data/packageName/files/secondary-dexes作为临时缓存目录...发布的multidex-1.0.1其实不会出现这个目录,而且这段的逻辑也不严谨,如果临时目录也创建失败了呢? 2、动态装载Dex的过程为什么反射那些字段、方法就可以了?...因为这个问题对目前的Android市场机型基本不存在,现在一般Android应用的最低兼容版本都是4.0,最可能出现这个问题的2.3之前的版本都不在考虑之列,而且目前5.0以上的机型占有率已经接近70%

    82720

    Android开发笔记(一百七十九)避免方法数过多的问题

    为了解决方法数过多的问题,Android推出了名叫MultiDex的解决方案,也就是在打包时把应用分成多个dex文件,每个dex的方法数量均不超过65536个,由此规避了方法数过多的限制。...若想让App工程支持MultiDex,需要对其略加改造,具体改造步骤说明如下。...首先要修改模块的build.gradle文件,往dependencies节点添加下面一行配置,表示导入指定版本的MultiDex库: implementation 'androidx.multidex:...:name属性设置自定义的Application,示例如下: android:name=".MainApplication" 然后重新编译App工程,之后运行的App就不再出现方法数过多的问题了...点此查看Android开发笔记的完整目录

    39720
    领券