Eclipse、Unity、Cocos环境下使用MultiDex

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里边,所以大家昨晚请记得测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容