Android分包方案
2016-03-18 10:34
549 查看
最近加入一个新团队, 项目巨大!!!!好吧,其实也不是巨大,只是module依赖比较多, 整整12个- - ,从来没遇到过这么多的依赖, 编译速度被拖得好惨....
也是因为这样, 出现了65K 问题 . 就是整个项目,也就是整个.dex文件中的方法数超过65535个了, 承载不下了. 这个原因往往出现在 中型以至大型项目才会有.
这是个局限. 那么需要将一个.dex包拆分成两个包了.原理是这样:在拆分过程中, 编译器会将启动所需要的类放在一个包(此称main.dex), 而另外暂时不用到的类放到第二个包(此称second.dex)。
但是,这时候又有另外一个问题产生了, android应用启动只会启动一个main.dex包, 不会同时加载两个.dex包,所以需要我们在代码中手动引导加载第二个second.dex包.
原理简单粗暴介绍到这,下面直接上步骤。
1.在项目中所有需要打包的module下得build.gradle文件中添加 一句话 multiDexEnabled = true
2.在android节点下加入如下图, 来保证分包后的编译环境
3.导入multixdex support包,用来操作引打包过程(很重要,前面的配置都是为它而生).
4.让你的application类最终继承 MultiDexApplication 类.
结论:分包就是这么简单, 65K问题解决, 我们又能愉快的编译了.
PS:昨天4399挂了一个码农.就在我附近.
同学们要注意身体, 愿天堂没有产品经理, 善哉善哉..
也是因为这样, 出现了65K 问题 . 就是整个项目,也就是整个.dex文件中的方法数超过65535个了, 承载不下了. 这个原因往往出现在 中型以至大型项目才会有.
这是个局限. 那么需要将一个.dex包拆分成两个包了.原理是这样:在拆分过程中, 编译器会将启动所需要的类放在一个包(此称main.dex), 而另外暂时不用到的类放到第二个包(此称second.dex)。
但是,这时候又有另外一个问题产生了, android应用启动只会启动一个main.dex包, 不会同时加载两个.dex包,所以需要我们在代码中手动引导加载第二个second.dex包.
原理简单粗暴介绍到这,下面直接上步骤。
1.在项目中所有需要打包的module下得build.gradle文件中添加 一句话 multiDexEnabled = true
defaultConfig { applicationId "com.biketo.rabbit" minSdkVersion 15 targetSdkVersion 22 versionCode 956 versionName "0.9.5.6" multiDexEnabled = true }
2.在android节点下加入如下图, 来保证分包后的编译环境
dexOptions { javaMaxHeapSize "2g" jumboMode = true }
3.导入multixdex support包,用来操作引打包过程(很重要,前面的配置都是为它而生).
//分包依赖库 compile 'com.android.support:multidex:1.0.0'
MultiDexApplication
4.让你的application类最终继承 MultiDexApplication 类.
结论:分包就是这么简单, 65K问题解决, 我们又能愉快的编译了.
PS:昨天4399挂了一个码农.就在我附近.
同学们要注意身体, 愿天堂没有产品经理, 善哉善哉..
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories