前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯TMQ在线沙龙|Android应用Dex分包之旅

腾讯TMQ在线沙龙|Android应用Dex分包之旅

作者头像
腾讯移动品质中心TMQ
发布2018-02-08 14:23:14
1.1K0
发布2018-02-08 14:23:14
举报
文章被收录于专栏:腾讯移动品质中心TMQ的专栏

Android应用Dex分包之旅

活动时间:2016年1月12日 QQ群视频交流

活动介绍:TMQ在线沙龙第十六期分享

本次分享的主题是Android应用Dex分包之旅。

共有42位测试小伙伴报名参加活动,在线观看视频人数18人~想知道活动分享了啥吗?往下看吧!

活动嘉宾

嘉宾简介

李金涛,腾讯高级测试工程师,负责过腾讯QQ浏览器专项测试及优化,目前主要负责腾讯应用宝专项测试及优化。有多年的后台开发和性能优化经验以及前端专项评测和优化经验。

分享主题

  • 什么是Dex?
  • 为什么要分Dex?
  • Dex分包的原理
  • Dex分包的方案
  • Dex分包的影响和测试关注

问答环节

1、提问:当apk中有jar包是混淆的时候是否可以进行dex分包,该jar无源码,如果可以dex分包我在分混淆的包时发生如下异常,应该如何解决

异常内容:java.io.IOException: Can't read [\build\intermediates\transforms\jarMerging\debug\jars\1\1f\combined.jar] (Can't process class [XXXXX.class] (Unknown verification type [73] in stack map frame))

答:当jar包是混淆包时,是可以进行dex分包的。理论上说,分包的过程不需要改变代码的编译和混淆的步骤,只需要在编译和混淆完成后,将.class文件拆分到不同目录(主、从dex的代码目录),然后对不同目录执行dx即可。至于你提到的异常,应该不是分包造成的,可能是将已经混淆过的jar包再次混淆造成的,建议参考一下Proguard相关的文档来解决。

2、提问:如果不使用dex分包,是否有其它的方法优化我们apk,比如给jar包进行瘦身

答:正如在分享中提到的那样,不使用dex分包,也是可以用缩减代码和方法数来优化dex的(给jar包瘦身也包含在内,因为第三方jar包最终也会被打包在dex文件中)。如果App的方法数或线性内存只是少量超标,这种方法是比较省时有效的,收益也较高。但是,在App的方法数或线性内存超标比较多的情况下,这种方法可能并不能完全解决问题,因为缩减代码和方法数一般是去掉冗余的代码,除非jar包或代码中有大量的冗余才能缩减得比较多。不过,从我们优化App的角度来说,即使不能完全解决问题,删除冗余代码或给jar包瘦身也是很有必要做的事情。

3、提问:使用dex分包需要考虑哪些可能会出现的问题

答:dex分包过程中可能出现的问题主要有NoClassDefFoundError、crash、启动耗时过长等。NoClassDefFoundError和crash一般都是某些依赖类找不到,可以通过调整这些依赖类的位置来解决;而启动耗时过长一般是从dex较大、加载过程较慢,可以通过调整从dex的大小或者优化启动过程来解决。具体说明可以参考分享PPT的内容。

4、提问:您提到在低版本构建工具上实现了分包,请问构建方案是Ant吗,能稍微介绍一下吗。我们这边修改Ant脚本调用高版本build tools上的分包相关脚本实现。

答:是的,我们也是用的ant,在ant任务里添加对分包工具和脚本的调用。我们分包并没有调整原来ant任务执行的顺序,而只是在其中插入了分包的步骤,主要的步骤包括:

1. 在Java代码编译完成后,插入扫描任务,扫描得到主dex应该包括的文件列表。

2. 在代码混淆完成后,插入拆分任务,根据主dex的文件列表将主、从dex的.class拆分到不同目录,然后用dx分别打出主、从dex。

5、提问:异步加载的坑能介绍下解决思路吗。

答:异步加载比同步加载要复杂一些,因为异步线程加载dex时,主线程还在继续执行,这就使得主dex的依赖类要比同步加载时多。如果有必要,可以适当做一些代码解耦。我们在做的过程中遇到的一些坑包括:

1. 主线程执行到某个阶段,需要的类在从dex中,但是从dex还没有加载完成,导致crash。这时可以在关键点加一个判断,判断异步线程加载是否完成,如果没完成,则等待加载完成后再继续执行。因为只有安装后首次启动App时才会有较大的加载耗时,所以加载可以放在启动页或欢迎页背后进行。

2. 如果App有外部调用入口,也要特别注意,防止外部调用时出现的加载问题。如果入口点太多,要想办法收敛。

获奖名单

ID:默言-游戏-自动化(576****67)

恭喜以上一位同学获得TMQ本次沙龙活动听众奖;

本次奖品是由TMQ 官方出品《移动APP性能评测与优化》新书哦

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯移动品质中心TMQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档