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项目,这样到现在出现这个问题就不足为奇了,而现在项目里还没加入分包机制,于是着手添加分包代码:

Android分包机制个人总结_第1张图片

第一步,在 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分包机制个人总结)