android 64K/65K问题 简单记录

到底是65k还是64k?


都没错,同一个问题,不同的说法而已。

65536按1000算的话,是65k ~ 651000;

65536按1024算的话,是64k = 641024。


方法数不能超过65536 , 2的16次方。因为在Dalvik指令集里面,执行方法的invoke-kind  index 大小只给了16bit 。

使用了Google提供的解决方案, MultiDex 。  (另一个方法: compiling with Jack toolchain )

一般apk解压之后只有一个class.dex文件,使用了MultiDex之后有两个、三个 或者 N个。


编译过程:

sourceCode  ---Java Complier ---> .class Files ---Dex--> .dex files  (class.dex)

Application.attachBaseContext 执行MultiDex.install() 。

首次启动会对 class.dex/class2.dex文件执行 dexopt操作,生成ODEX文件。

非首次启动则直接从cache中读取已经执行过dexopt的ODEX文件。

问题:

安装时间长。

执行时间过长会出现ANR。

兼容性为android 4.0 以上。

5.0以后的机器,ART会把多个dex合并成oat文件。

android 2.2 或 2.3 的缓存只有5M,4.x提高到了8m或者16m



异步动态加载方案:

增加一个process(进程)来异步加载dex,在attachBaseContext里面轮询,看是否进程存在,是否已经加载完成。

加载完成后,进入Application的onCreated() 方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容