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

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

1K 等于 1024,65536 刚好是 64K,为了便于称呼和使用,就将这个限制规则统称为 64K 方法数引用限制。...为了解决 64K 方法数限制问题,我们可以在项目中使用 multidex 配置,当项目中方法数(包括:Android framework,library 和我们自己写代码)超过 64K 时,编译系统会自动编译出多个...DEX字节码文件,这也是以前为什么安卓手机用户总是诟病Android系统比iOS系统运行卡顿原因),限制每个APK文件只能包含一个 DEX 文件(即 classes.dex)。...但Instant Run仅仅作用于debug版本,我们依然需要给release版本配置multidex来避开64K方法数限制。...strings 数量限制与 method 数量限制非常相似,但是如果项目方法数超过 64K, 我们还是需要使用 multidex 来解决,注意区分。

1.1K20

Android_关于程序产生 65535 (64K)解决办法

这错误意思是说,你应用中Dex文件方法数超过了最大值 65536上限值,简单来说, 超过了应用内方法数限制, 在Android系统中,一个App所有代码都在一个Dex文件里面。...Dex是一个类似Jar存储了多有Java编译字节码归档文件。...当Android系统启动一个应用时候,有一步是对Dex进行优化,这个过程有一个专门工具来处理,叫DexOpt。DexOpt执行过程是在第一次加载Dex文件时候执行。...这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex效率会比直接执行Dex文件效率要高很多。...尽管在新版本Android系统中,DexOpt修复了这个问题,但是我们仍然需要对低版本Android系统做兼容 这种问题官方也关注到了,为了解决这一问题,提出了通过multidex包进行多dex编译方法

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

Android 使用android-support-multidex解决Dex超出方法数限制问题

虽然Google解决了应用总方法数限制问题,但并不意味着开发者可以任意扩大项目规模。...Multidex仍有一些限制DEX文件安装到设备过程非常复杂,如果第二个DEX文件太大,可能导致应用无响应。此时应该使用ProGuard减小DEX文件大小。...同样因为Dalvik linearAlloc限制,如果请求大量内存可能导致崩溃。Dalvik linearAlloc是一个固定大小缓冲区。...Android 2.2和2.3缓冲区只有5MB,Android 4.x提高到了8MB或16MB。当方法数量过多导致超出缓冲区大小时,会造成dexopt崩溃。...通常开发者自己代码很难达到这样方法数量限制,但随着第三方类库加入,方法数就会迅速膨胀。因此选择合适类库对Android开发者来说尤为重要。

1.4K80

解决“Cannot merge new index xxx into a non-jumbo instruction”问题

,比如66345等,从这个提示看,和Dex方法超过64K限制一样,应该是同一个问题。...不过App已经解决了这个64K方法问题,怎么还会提示呢。 从提上看,是一个non-jumbo,让我想到了Dexjumbo模式,这是一个用来配置制定该Dex是不是一个巨大Dex。...那么以前为什么不会出现这个问题呢,我们从git提交历史来看,发现昨天需求新增了一个第三方包,导致该模块方法变多,超过了限制,所以今天就有了这个错误提示。。 既然知道了原因,那么就很好解决了。...使用Gradle构建,在模块build.gradle里配置: android { dexOptions { jumboMode true } } 如果是使用Eclipse+Ant...关于超过64K方法分Dex解决办法可以参考官方Configure Apps with Over 64K Methods这篇文章。

70430

闲聊MultiDex

Android系统安装一个应用时候,有一步是对Dex进行优化,这个过程有一个专门工具来处理,叫DexOpt。DexOpt执行过程是在第一次加载Dex文件时候执行。...使用Multidex突破64K方法数限制原理解析 简单地来说,MultiDex 做事情就是: 解压得到 dex 并进行 dexOpt ; 把主dex文件除外 dex 文件都追加到 PathClassLoader...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前 Android 版本上,应用仍有可能遭遇这一限制。...Reference 配置方法数超过 64K 应用 类加载机制系列3——MultiDex原理解析 Android使用Multidex突破64K方法数限制原理解析 其实你不知道MultiDex到底有多坑...Android Dex分包最全总结:含Facebook解决方案

85710

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

本文目标 通过Dalvik 可执行文件分包应用配置来越过65536限制,俗称65k Android 64k引用限制原因 Android 应用 (APK) 文件包含 Dalvik Executable...由于 65,536 等于 64 X 1024,因此这一限制也称为“64K 引用限制”,但是现在大多数时候,我们都称之为Android 65k问题。...由于 Instant Run 仅适用于调试版本应用,我们仍需配置发布构建进行 Dalvik 可执行文件分包,以规避 64K 限制。...规避 64K 限制前提 在将应用配置为支持使用 64K 或更多方法引用之前,我们应该采取措施减少应用代码调用引用总数,包括由应用代码或包含库定义方法。...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前 Android 版本上,应用仍有可能遭遇这一限制

94120

闲聊MultiDex

Android系统安装一个应用时候,有一步是对Dex进行优化,这个过程有一个专门工具来处理,叫DexOpt。DexOpt执行过程是在第一次加载Dex文件时候执行。...使用Multidex突破64K方法数限制原理解析 简单地来说,MultiDex 做事情就是: 解压得到 dex 并进行 dexOpt ; 把主dex文件除外 dex 文件都追加到 PathClassLoader...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前 Android 版本上,应用仍有可能遭遇这一限制。...Reference 配置方法数超过 64K 应用 类加载机制系列3——MultiDex原理解析 Android使用Multidex突破64K方法数限制原理解析 其实你不知道MultiDex到底有多坑...Android Dex分包最全总结:含Facebook解决方案

99110

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

本文目标 通过Dalvik 可执行文件分包应用配置来越过65536限制,俗称65k Android 64k引用限制原因 Android 应用 (APK) 文件包含 Dalvik Executable...由于 65,536 等于 64 X 1024,因此这一限制也称为“64K 引用限制”,但是现在大多数时候,我们都称之为Android 65k问题。...由于 Instant Run 仅适用于调试版本应用,我们仍需配置发布构建进行 Dalvik 可执行文件分包,以规避 64K 限制。...规避 64K 限制前提 在将应用配置为支持使用 64K 或更多方法引用之前,我们应该采取措施减少应用代码调用引用总数,包括由应用代码或包含库定义方法。...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前 Android 版本上,应用仍有可能遭遇这一限制

80310

MultiDex(一)之源码解析

超过最大方法数限制问题,是由于Dex文件格式限制,一个Dex文件中method个数采用使用原生类型short来索引文件中方法,4个字节共计最多表达65536个method,field/class个数也均有此限制...生成Dex文件过程,是将工程所需全部class文件合并且压缩到一个Dex文件期间,也就是Android打包Dex过程中, 单个Dex文件可被引用方法总数(自己开发代码以及所引用Android框架...、类库代码)被限制为65536; 但是这种小问题怎么能难倒程序猿哥哥呢,相信大家或多或少都听说过Multidex:Google官方对64K方法数问题一种补救措施,通俗讲就是:既然你代码这么多,...这是由于dexoptLinearAlloc限制引起,在Android版本不同分别经历了4M/5M/8M/16M限制,4.2.x系统上可能都已到16M, 在Gingerbread或者以下系统LinearAllocHdr...dexopt使用LinearAlloc来存储应用方法信息。Android 2.2和2.3缓冲区只有5MB,Android 4.x提高到了8MB或16MB。

70520

Android拆分与加载Dex多种方案对比

对于Android大型程序来说,64k方法数与线性内存限制都是必须要考虑问题。...事实上,解决64K方法限制唯一方法是拆分多dex,不同方案差异在于需指定哪些类必须在主dex,这与我们期待效果以及加载方式相关。...解决安装过程线性内存方法是限制dexlinearalloc大小,这里经验值为3355444(2.2以上,如何计算?)。对于运行过程线性内存限制可参考Facebook。...以线性内存3355444(限制5m,给系统预留部分)、方法数64K限制,即当满足任意一个条件时,将拆分dex。...这是因为一来觉得以Android推广速度,5.0用户增长应该是遥遥无期,二来加载Dex代码,传进去是zip,在加载前我们需要验证MD5,确保所加载Dex没有被篡改(Android官方没有验证,

2.4K80

App工程从Eclipse迁移到Android Studio问题总结

,提示“File is loaded in the wrong encoding: 'UTF-8'” 解决办法:打开Windows记事本,把该文件另存为UTF8编码格式。...编译jni代码mk文件,如果文件格式是“UTF带BOM”,就无法正常编译jni代码。 解决办法:使用UEStudio等文本编辑软件,把文件另存为“UTF无BOM”格式。...关于重复引用jar包或依赖库问题 如果发现打包时报错“com.android.dex.DexException: Multiple dex files define Landroid/support...2、关于方法数超出64K上限问题 如果发现打包时报错“Error:The number of method references in a .dex file cannot exceed 64K.”...因此必须拆分打包生成dex文件,把一个文件拆为两个甚至更多,以规避65536个数限制,主要步骤如下: a.

1.5K30

Multidex记录一:介绍和使用

0xffff]: 65536 超过最大方法数限制问题,是由于DEX文件格式限制,一个DEX文件中method个数采用使用原生类型short来索引文件中方法,也就是2个字节共计最多表达65536个method...Google官方:配置方法数超过 64K 应用 Android 5.0 之前版本 Dalvik 可执行文件分包支持 Android 5.0(API 级别 21)之前平台版本使用 Dalvik 运行时来执行应用代码...默认情况下,Dalvik 限制应用每个 APK 只能使用单个 classes.dex 字节码文件。...要想绕过这一限制,您可以使用multidex,然后管理对其他 DEX 文件及其所包含代码访问。...,在运行时可能导致程序崩溃,这个主要是因为Dalvik linearAlloc 一个限制,这个限制Android 4.0 (API level 14)已经增加了, 应用也有可能在低于 Android

1.5K10

另一种绕过 Android P以上非公开API限制办法

去年发布 Android P上引入了针对非公开API限制,对开发者来说,这绝对是有史以来最重大变化之一。...去年我给出了一种绕过Android P对非SDK接口限制简单方法,经验证,这办法Android Q Beta 版上依然能正常使用。...而且据我所知,有若干用户量不少 APP 在线上使用了我提供 FreeReflection 库,想来应该也是没有问题吧。 不过今天,我打算给出另外一种绕过限制办法。...上次分析系统是如何施加这个限制 时候,我们提到了几种方式,最终给出了一种修改 runtime flag 办法;其中我们提到,系统有一个 fn_caller_is_trusted 条件:如果调用者是系统类...我们知道,对APP来说,所谓系统类就是被 BootstrapClassLoader 加载类,这个 ClassLoader 并非普通 DexClassLoader,因此我们无法通过插入 dex path

2.6K20

Android减包 - 使用APK Analyzer分析你APK

本文是对 Analyze Your Build with APK Analyzer 翻译。 Android Studio 2.2包含了APK Analyzer,通过它我们能够直观地看到APK组成。...图3:翻译字符串资源预览 查看DEX文件 APK AnalyzerDEX文件浏览器让你能够快速了解DEX文件信息。...我们能看到类、包、总引用和声明个数,这些信息能够帮助我们决定是否使用multi-dex或者移除依赖使得满足64K方法数限制。 图4展示了一个中等大小APP(方法数接近64K)。...Referenced Method列是DEX文件中引用全部方法,它包含了你定义方法、依赖library、定义在标准Java和Android包中方法。...---- 作者简介:damonxia(夏正冬),天天P图Android工程师

2.8K60

【译】使用 APK Analyzer 分析你 APK

Android Studio 2.2包含了APK Analyzer,通过它我们能够直观地看到APK组成。使用APK Analyzer不仅能够减少你花在debug上时间,而且还能减少你APK大小。...(译注:新版APK和旧版APK之间文件大小差异) 这里有3种方法访问APK Analyzer: 拖拽APK到Android Studio编辑窗口。 切换到Project视图,并且双击APK文件。...图4:翻译字符串资源预览 查看DEX文件 APK AnalyzerDEX文件浏览器让你能够快速了解DEX文件信息。...我们能看到类、包、总引用和声明个数,这些信息能够帮助我们决定是否使用multi-dex或者移除依赖使得满足64K方法数限制。 图5展示了一个中等大小APP(方法数接近64K)。...Referenced Method列是DEX文件中引用全部方法,它包含了你定义方法、依赖library、定义在标准Java和Android包中方法。

2.4K50

一款 APK 是怎么诞生

,分别是: Dex:.class 文件处理后产物,Android 系统可执行文件 Resource:资源文件,主要包括 layout、drawable、animator,通过 R.XXX.id 引用...① Android Studio 自带 APK 分析器 通过 APK 分析器,我们可以完成这些操作: 查看 APK 中文件(如 DEXAndroid 资源文件)绝对大小和相对大小 了解 DEX...1.2 Dex 知识点拓展 当我们在 Android 查看一个 APK 时候,可以看到右上角有 Defined Methods 和 Referenced Methods,但大多数人可能不知道这两者区别...Android64K 引用限制,当 type_ids、method_ids 或者 field_ids 超过 65536(64 * 1024)时候,需要进行 dex 分包,为了 Dex 数量尽可能少...Dex 信息有效率 = Defined Methods 数量 / Referenced Methods 数量 二、 构建源码导读 当我们用 Android Studio 进行安装包构建时候,会发现其实是运行了一连串

84530

你必须要懂APK瘦身知识

classes.dex:包含以Dalvik / ART虚拟机可理解DEX文件格式编译类。 AndroidManifest.xml:包含核心Android清单文件。...单个 classes.dex 文件可以容纳大约 64K 方法。如果你达到了这个限制,你必须要在你工程中启用 multidexing。...这将会创建另一个 classes1.dex 文件去存储剩下方法。所以 classes.dex 文件数目由你方法数而定。...它包括相同 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析优化,以进一步减小 APK 大小和帮助提高其运行速度。...(Native.java:16) ... 5 more 我们也是有办法应对,可以参见这个开源项目ReLinker 另外关于SO优化我会单独拿出来讲一讲。

72530
领券