文档章节

Unable to execute dex: method ID not in [0, 0xffff

addcn
 addcn
发布于 2016/07/28 19:23
字数 730
阅读 14
收藏 0
点赞 0
评论 0

1、使用动态加载技术时,一般需要用到这两个类加载器:

  • PathClassLoader - 只能加载已经安装的apk,即/data/app目录下的apk。
  • DexClassLoader - 能加载手机中未安装的apk、jar、dex,只要能在找到对应的路径。

http://blog.csdn.net/u010687392/article/details/47121729

2、开发时提前编译多个dex

原理:

第一步将项目中的代码提前生成jar包,最好是不常改动的代码。 将第三方jar包和第1步中生成的jar包,cmd执行SDK中的dx.bat命令,将jar包编译生成dex文件,比如v4.dex,v7.dex,map.dex等,最好一类功能或模块对应一个dex,然后将这些dex文件放进assets文件夹中。

将以上生成dex的jar包,做成编译环境Library。类似于android.jar,这个Library只参与主项目代码编译,不参与项目打包。这样项目就不会报错,能正常编译运行。 最后同第一种方案,手动加载assets文件中的dex文件,需要用到一个MultiDex.java文件的API。 优点: 能很大程度上解决65534的问题,且由于预先编译dex,所以项目在开发期间编译运行效率能提高很多。

缺点: 打包生成的apk体积依然庞大,且只能拆分项目里的公共模块和第三方jar包,所以对于业务和开发者庞大的项目来说,所有人在一个项目里开发协作起来依然存在问题,而且res资源文件依旧是个难以拆分的问题。

http://xybcoder.github.io/2016/04/27/Multidex%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%E6%95%B0%E8%B6%8A%E7%95%8C/

3、微信加载方案

首次加载在地球中页中, 并用线程去加载(但是 5.0 之前加载 dex 时还是会挂起主线程一段时间(不是全程都挂起))。

dex 形式

微信是将包放在 assets 目录下的,在加载 Dex 的代码时,实际上传进去的是 zip,在加载前需要验证 MD5,确保所加载的 Dex 没有被篡改。

dex 类分包规则

分包规则即将所有 Application、ContentProvider 以及所有 export 的 Activity、Service 、Receiver 的间接依赖集都必须放在主 dex。

加载 dex 的方式

加载逻辑这边主要判断是否已经 dexopt,若已经 dexopt,即放在 attachBaseContext 加载,反之放于地球中用线程加载。怎么判断?因为在微信中,若判断 revision 改变,即将 dex 以及 dexopt 目录清空。只需简单判断两个目录 dex 名称、数量是否与配置文件的一致。

总的来说,这种方案用户体验较好,缺点在于太过复杂,每次都需重新扫描依赖集,而且使用的是比较大的间接依赖集。

http://yydcdut.com/2016/03/20/split-dex/

© 著作权归作者所有

共有 人打赏支持
addcn
粉丝 10
博文 53
码字总数 13824
作品 0
深圳
程序员
android 项目突然报错

[2015-12-05 20:24:10 - Dex Loader] Unable to execute dex: method ID not in [0, 0xffff]: 65536 [2015-12-05 20:24:10 - Djt-Family3] Conversion to Dalvik format failed: Unable to e......

天王盖地虎626 ⋅ 2015/12/05 ⋅ 1

Android Unable to execute dex: method ID not in [0, 0xffff]: 65536

eclipse开发环境 因为项目需要,引用的lib工程比较多,最后编译的时候出现以下异常: [2014-11-26 16:13:03 - Dex Loader] Unable to execute dex: method ID not in [0, 0xffff]: 65536 [2...

蓝色精灵_0907 ⋅ 2016/05/10 ⋅ 2

Andriod 出现DEX的错误,搜索了下Andriod编译环境最多支持6W多个方法,如何解决?

最近平台的Andriod端编译出现了一个很少见的问题,就是由于工程中方法数量太多导致出现下面的异常,无法编译。 [2014-03-12 11:32:43 - Dex Loader] Unable to execute dex: method ID not ...

CapJes ⋅ 2014/03/14 ⋅ 1

关于安卓应用方法过多的问题

异常 : [2016-04-16 20:39:56 - Dex Loader] Unable to execute dex: method ID not in [0, 0xffff]: 65536 [2016-04-16 20:39:56 - qqzq] Conversion to Dalvik format failed: Unable to......

天使broken ⋅ 2016/04/16 ⋅ 2

关于加入第三方包之后导致自定义包无法找到问题

在项目开发过程中,引入第三方的jar包之后,报出一下错误,提示自定义类无法找到,但删除引入的第三方包之后,运行正常: 起初怀疑是第三方Jar包问题,经过反复查看,结果发现真正原因在于引...

tyronejw ⋅ 2015/12/11 ⋅ 0

eclipse下android项目解决方法数id超过65535

java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536 你的应用中的Dex 文件方法数超过了最大值65536的上限,简单来说,应用爆棚了. 那么让我们看一下为什么会引起这种错...

chuxuezhe_ ⋅ 2014/12/10 ⋅ 11

Android应用打破65K方法数限制

近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持。 如果你是一名幸运的Android应用开发者,正在开发一个前景广阔的应用,不断...

____追梦人 ⋅ 2016/02/23 ⋅ 0

Android开发出现神奇问题,求解决啊~~~

Android开发,Run项目的时候出现如下问题,怎么解决啊~~~ Unable to execute dex: Multiple dex files define Lorg/springframework/core/NestedRuntimeException; Conversion to Dalvik for......

Xiaopeng ⋅ 2013/08/06 ⋅ 2

关于使用android studio时的一些错误整理

导入一些demo的时候,比较慢,会卡在进度条上,而且还影响整个studio不能进行操作,一般我都是先断网导入,然后再把这个gradle改成本地自己的(复制能运行的项目里的就好).... 1、android s...

东西南瓜西葫芦 ⋅ 2015/08/07 ⋅ 0

Unable to execute dex: Multiple dex files define解决方案

导入友盟的第三方包之后就一直报错 报错如下 Unable to execute dex: Multiple dex files define Lcom/tencent/mm/a/a; [2015-03-14 18:51:39 - WelcomeActivity] Conversion to Dalvik for......

感觉太煽情 ⋅ 2016/08/26 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 12分钟前 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部