Android 分Dex (MultiDex)】的更多相关文章

需要分Dex的理由想必大家都知道了.正是在ART以前的Android系统中,Dex文件对于方法索引是用一个short类型的数据来存放的.而short的最大值是65535,因此当项目足够大包含方法数目足够多超过了65535(包括引用的外部Lib里面的所有方法),当运行App,就会得到如下的错误提示. Unable to execute dex: method ID not , Conversion to Dalvik format failed: Unable to execute dex: me…
对于功能越来越复杂的app的两大问题 问题一:当项目越来越大,方法数超过65536,编译时会出错(为什么是65536,参考下面关于dexopt对方法id检索存储介绍),这个所说的方法数包含用到的框架,依赖的jar包,当然还有我们应用本身的代码中的所有方法(我们自己写的). 我们可以写个Demo看看报的具体错误. 那我们写个65536以上个方法,可以用Java的IO流向一个txt里写入65537个方法. public class MethodWriter {public static void m…
在Android开发中,函数方法超过65k限制后,我们就常常会用到multidex分包解决,但是multidex的配置,对系统apk的构建.签名.打包复杂性大大的增加,严重的降低了构建效率.那这个问题怎么处理呢? 为解决这个问题,通常我们使用的方法就是在Gradle productFlavors新建出来一个 development flavor 和 production flavor 来满足我们不同构建需求. 为了更直观的给大家展示具体的操作,我们通过一个例子来演示如何设置这些flavors在G…
Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试支持,但是功能还是很弱的说,因为IDA动态调试Android程序的DEX文件时,查看变量很不方便,可以说然并卵. @根据android的官方文档,如果要调试一个App里面的dex代码,必须满足以下两个条件中的任何一个: 1.App的AndroidManifest.xm中Application标签必选…
我们在开发项目时,喜欢引入好多的第三方包,大大的方便了我们的开发,但同时,因为android方法总数的限制,不能超过65k,然而呢,随着我们的开发,65k最终还是会超过,所以,google就给出了这个解决方案,但一直好奇它是内部是怎么实现的,我们今天就来根据源码来看看这个包到底做了什么,怎么把多个dex读取出来的.先看下这个包里面都有哪些类: 我们首先看MultiDexApplication,只要我们我们自己的Application继承MultiDexApplication就可以解决问题,那我们…
一.找坑:谷歌规定单个dex文件中的方法不能超过65536的限制 我们编写项目过程中在工程的lib文件夹下引用的第三方插件jar包太多或者项目过大,编译运行时就有可能报出com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536错误.看到这个错误说明你的方法加起来已经超过了65536这个数目.但是谷歌规定单个dex文件中的方法不能超过65536的限制. 如下图所示,Android Studio 中的…
今年Google发布了Android N,Android N新增了不少功能,最受关注的自然就是分屏了. 这一功能对国内的很多手机用户并不陌生,其实很多第三方系统早已经实现了这一功能,如EMUI,Flyme等等. 分屏操作 在我的手机中,就可以一边看视频,一边浏览简书.Android N分屏功能的更新,似乎并不会对我国第三方Android系统带来多大的影响.毕竟厂商有自己实现这一功能的套路. 然而,谷歌反应的“缓慢”真的没有价值吗?其实不是的,Android N新增的功能是为其他第三方系统作出一个…
当我们的项目代码过大时,编译运行时会报Unable to execute dex: method ID not in[0, 0xffff]: 65536)错误.当出现这个错误时说明你本身自己的工程代码中含有的太多的方法,或者你的工程lib文件夹下引用的第三方插件jar包有太多的方法,这两者的方法加起来已经超过了65536这个数目.而谷歌规定单个dex文件中的方法不能超过65536的限制. 那么这个时候,我们就需要分包处理解决.一般情况下的解决方案就是把整个项目工程包括jar,区分开来分解成两个d…
Eclipse里有非常多界面组件,文件列表.编辑区.类结构等等,在这么多界面组件里,再打开一个Logcat就基本没有什么空间了.与其挤在一起还不如分开成两个窗体. 或者你有两个屏幕,想一个屏幕编辑,一个屏幕看log. 总之,目的是让Logcat分屏. 尝试了下在Eclipse里实现这个功能,不太easy.可是我们能够单独打开一个DDMS窗体,查看logcat. 打开Android SDK的文件夹,打开 /tools/ddms.bat ,这时就打开单独的一个DDMS窗体. 最大化它,享受分屏查看l…
Android批量打包实现有很多方式你可以用Ant,Maven或者Gradle.在处理多个Library和NDK编译的时候配置有些麻烦,且每个渠道都编译一次效率较低.如果没有复杂的分渠道编译需求,我们可以换种简单的方式.因为apk中的assets是不会编译的,我们可以修改assets文件的值实现渠道修改,这样你的apk就可以通过读取修改过的文件区分各个渠道,用于数据统计.下面是我写的一个python脚本: 使用说明(Python 3.4): 1. 使用IDE工具导出未签名Apk,apk文件为WM…