美文网首页
65k methods limit

65k methods limit

作者: xbase | 来源:发表于2016-04-05 11:23 被阅读122次

Dalvik 65K methods limit
你很快就会遇到的,不过放心,multidexing
会帮助你。
什么是Dalvik 65K methods limit?我们知道,我们写完java code之后,dx tool会把java编译的class文件再编译成Dalivik虚拟机能识别的DEX文件,这个文件里最多能够索引65536个method。关于这个有两点要注意:

  1. 这些method是指能够索引(reference)到的,而不是定义(define)
    的。或者说,如果你定义了一个方法,但这个方法并没有被调用,那么就不算在内。
  2. 这些method不仅仅是开发人员自己写的,还包括所有第三方library里面的method。

索引是用一个链表结构存储的,类型是short,short占2字节,16位,2^16=65536,所以,我们总共可以索引65536
个方法,包括自己写的和引入第三方库里的。
那么,我们如何能快速知道我们的app里已经有多少个method了呢?

现在,既然我们已经知道了自家app里的method数了,那么如何来处理这种情况呢?(官方做法、减少方法数、分包、插件化、增大可容纳的方法数)

  • Multidex,官方提供的解决方案(这个jar包最低可以支持到API 4的版本,5.0及以上版本默认支持),这篇文章里有详细的使用方法,此不赘述(使用Multidex support library)原理:将Multidex作为基本的dex,用它再去管理其他的dex。
  • ProGuardProGuard
    可以把code里unnecessary的method移除,压缩apk,当然还有代码混淆
    的奇效。
  • 使用H5文件代替一部分的逻辑代码。
  • 再创建一个DEX File
    。把app里可以独立的模块或code提取出来,放到一个独立的dex文件里,你可以使用Custom ClassLoader来加载这些类,然后使用接口
    或反射
    来调用这些方法。不过,这个过程还是比较麻烦的。
  • 插件化: https://github.com/singwhatiwanna/dynamic-load-apk
  • 如果使用eclipse,可以在Project.proterty中配置一句话就Ok啦, dex.force.jumbo=true,应该是暂时增大可容纳的方法数,也就是说方法在增大,还是会遇到问题,具体不是很了解,请各位大神指教!

相关文章

网友评论

      本文标题:65k methods limit

      本文链接:https://www.haomeiwen.com/subject/lcjplttx.html