Android分包机制个人总结

这周由于项目项目需求,集成了小米推送;

一步步集成完毕,正当准备测试的时候,编译没通过;报错如下

com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExceException: Process 'command 'D:\android\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 2

这个问题在去年刚入职的时候从svn上down下来项目的时候就遇到过,当时导致错误的原因是jar包重复;于是我又开始每个libs下找可能重复的jar包,但一无所获;于是把小米推送的jar包删除掉,还原原来的代码,运行,一切正常;很是不解;下面这个图片是小米推送的jar包,并非想依赖的第三方工程库那样可以直接操作代码;


于是,又重新导入小米推送的jar包,仔细查看第一行的报错:

 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

思路逐渐开始清晰,我突然想起来公司的项目是原来由eclipse项目转成的android studio项目,这样到现在出现这个问题就不足为奇了,而现在项目里还没加入分包机制,于是着手添加分包代码:

第一步,在 dependencies中加入依赖   compile'com.android.support:multidex:1.0.1'  同步之后,再按照图中第一个和第二个红框加入相关代码,需要注意的是 第二个红框中的内容,如果你的jdk是64位的时候才需要加,如果是32位的请忽略;

至于第三个细红框中的内容,对我来说,则是一个判断这个项目是否是由eclipse项目转过来的android studio项目,这是一个依据;

第二步,把自己自定义继承Application的类改为继承  MultiDexApplication 即可;

应该每个项目中都会有需要写一个自定义的继承Application的类,并在AndroidManifest.xml文件中定义执行;当然如果你自定义的Application继承了别的Application了,你可以在你现有的Application里重写一个方法即可;

@Override

protected  void  attachBaseContext(Context base) {

     super.attachBaseContext(context);

      Multidex.install(this);

}


相关代码加完之后,运行,程序已经可以正常跑起来;

结论是,对于某些问题,如果短时间内解决不了,就不要死盯着不放了,可以出去走一圈或者上个厕所换下思路去解决另一个问题,说不定你在解决其他问题的时候,那个顽固问题不知不觉的就被kill掉了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,648评论 25 709
  • 2017年4月13。 竟然下了三天的雨,在今天突然变得暴躁起来,手机上14点的闹铃刚响起,又拖了五分钟,外面雨下的...
    Asaaaa阅读 252评论 1 0
  • 肖建东阅读 162评论 0 2
  • 今天 在上班的地铁上 (别人的下班时间) 翻着kendle 看到好几句有意思的话 (因为翻着有意思的书咩) 只是 ...
    蚝宝宝阅读 207评论 0 0
  • 提起喝酒我心情好复杂,今天是成功戒酒第四天,终于实现了我多次戒酒没超过三天的愿望,为了庆祝,我决定晚上叫上酒友小...
    天涯孤旅背包客阅读 496评论 2 5