MultiDex目前只对AndroidStudio作支持,想要在Eclipse下面进行,还需要折腾一些。
而Unity、Cocos大部分工程在Android上面都是用Eclipse作为IDE进行编辑的,而两者的区别在于,Cocos的工程可以通过Eclipse直接打包成APK,可是Unity却不行。这给在Eclipse上面支持MultiDex又带来了坑。
本文提供一个较为简单但是有效的方法。
MultiDex的过程
简单点说,就是两步:分包,然后读取。
分包在AndroidStudio上面是通过Gradle实现的,具体原理请自行搜索。
分包的结果就是在打包的时候,直接将所有的代码分割成classes.dex、classes2.dex等的形式存在于apk里面。
而读取则是通过导入android.support.multidex包来运行MultiDex.install(Context context)来实现的,主要工作是读取apk根目录下的classesN.dex文件。
模仿MultiDex
手动分包
手动分包是因为我发现有两点:
1、使用gradle进行分包,好像无从下手,时间成本高;
2、一个应用,自己开发者写的很难达到64K个方法,有很方法都是SDK的Jar包提供的;
综上所述,我们将所有SDK的jar包手动编译成dex文件即可。
修改android.support.multidex
我们知道MultiDex.install(Context context)会自动读取apk根目录下的classesN.dex文件,但是这里有两个局限性:
1、命名的局限性,dex名字必须遵循classesN.dex的命名方式,但是这种dex难以维护,例如我现在手动分包成8个dex文件,每个都这么命名的话,你很难一眼看出dex的内容是什么,如果可以自由命名的话,那么我们可以根据dex的内容进行命名,例如FacebookSDK.dex,而不是classes3.dex这种晦涩的命名;
2、dex文件位置的局限性,dex文件必须放在apk根目录,但是apk的build多种多样,cocos还好,用的是Eclipse的build,但是Unity就没那么老实了,Pro版本的U3D没用过,但是免费版的连src的.java都不帮我编译是怎么回事...反正就是要把classesN.dex文件放到apk里面去,没那么简单。
综上所述,我自己修改了android.support.multidex包的内容(BetterMultiDex),大家只要在assets文件夹下面新建一个文件夹叫做secondary_dexs的文件夹然后把dex文件全部扔进去(随便命名),然后使用BetterMultiDex.install(this);即可。
抱歉,其实有一些坑的
之前在接入VungleSDK的时候,发现它使用了dagger,导致VungleSDK必须放到主dex里边,所以大家昨晚请记得测试。
网友评论