MultiDex 相关问题解决记录

问题1:65536 ,So easy!原因:Dalvik 的 invoke-kind 指令集中,method reference index 只留了 16 bits,最多能引用 65535 个方法。参考=>由 Android 65K 方法数限制引发的思考.解决:dependencies { compile 'com.android.support:MultiDex:...
摘要由CSDN通过智能技术生成

问题1:65536 ,So easy!

原因:Dalvik 的 invoke-kind 指令集中,method reference index 只留了 16 bits,最多能引用 65535 个方法。
参考=>由 Android 65K 方法数限制引发的思考.

解决:

dependencies { 
    compile 'com.android.support:MultiDex:1.0.1'
}

继承 Application ,重写 attachBaseContext(Context)

@Override 
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

问题2:Too many classes in –main-dex-list ,what?

原因:通过上面的官方分包,已经把原 Dex 分为 1 主 Dex 加多从 Dex。主 Dex 包含所有 4 大组件,Application,Annotation,multidex 等及其必要的直接依赖。由于我们方法数已达到 16W 之巨,上百个 Activity 全部塞进主 Dex,又成功的把主 Dex 撑爆了。

解决: gradle

afterEvaluate { 
  tasks.matching { 
    it.name.startsWith('dex') 
  }.each { dx -> 
    if (dx.additionalParameters == null) { 
      dx.additionalParameters = []
    }  
    dx.additionalParameters += '--set-max-idx-number=48000' 
  } 
}

参考=>Android Dex 分包之旅

问题3:gradle 1.5.0 之后不支持这种写法 ,what the fuck?

原因:官方解释 Gralde1.5.0以上已经将(jacoco, progard, multi-dex)统一移到Transform API里,然而 Transform API 并没有想象的那么简单好用,翻遍 Google 终于找到一个兼容 Gradle 1.5.0以上的分包插件

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值