Android Studio中Dex分包方案
2016-10-20 10:00
316 查看
现在热修复、插件化是一个比较流行的趋势。qq空间的超级补丁方案、微信的Tinker前提都是需要分包。网上找了很多资料,大多都是eclipse中的分包方法。
查看dex方法数的一个网址:http://inloop.github.io/apk-method-count/
下面给出AS中的一个分包方法。
首先gradle的配置:
只要设置true就行,我的是AS2.1 和 gradle2.1.0,不需要额外complie multidex包了,编译器会自动导入最新的multidex包。
这里我们使用一个第三方的包dexnkife来完成分包的配置:
https://github.com/ceabie/DexKnifePlugin
配置方法:
在project的build.gradle加入
在app的build.gradle加入
在project的新建dexknife.txt文件,在其中添加dex的分包配置。
如果我们想让某个class放在主包,剩下的都在其他包,我们可以先通过先输入包名,指定某个包下的所以class都在第二个dex中,再通过-keep指令,指定某个class在第一个包,这样可以达到了指定某个class在主包的效果。
接下来就只需要编译就行了。系统会自动生成maindexlist.txt也就是主包中的class列表。
编译前:
编译后:
这样分包就完成了。
查看dex方法数的一个网址:http://inloop.github.io/apk-method-count/
下面给出AS中的一个分包方法。
首先gradle的配置:
defaultConfig { 。。。。。 multiDexEnabled = true }
只要设置true就行,我的是AS2.1 和 gradle2.1.0,不需要额外complie multidex包了,编译器会自动导入最新的multidex包。
这里我们使用一个第三方的包dexnkife来完成分包的配置:
https://github.com/ceabie/DexKnifePlugin
配置方法:
在project的build.gradle加入
buildscript { .... dependencies { .... classpath 'com.android.tools.build:gradle:2.2.0-beta2' // or other classpath 'com.ceabie.dextools:gradle-dexknife-plugin:1.5.6' } }
在app的build.gradle加入
apply plugin: 'com.ceabie.dexnkife'
在project的新建dexknife.txt文件,在其中添加dex的分包配置。
<span style="color:#ff0000;"># 如果你想要某个包路径在maindex中,则使用 -keep 选项,即使他已经在分包的路径中. -keep android.support.v4.view.** # 这条配置可以指定这个包下类在第二dex中. android.support.v?.** com.fooww.soft.android.** # 使用.class后缀,代表单个类. -keep android.support.v7.app.AppCompatDialogFragment.class -keep com.fooww.soft.android.Presentation.SplashScreenActivity.class -keep com.fooww.soft.android.Application.App.class -keep com.fooww.soft.android.Application.BaseActivity.class -keep net.bither.util.NativeUtil.class</span> # 不包含Android gradle 插件自动生成的miandex列表. -donot-use-suggest # 不进行dex分包, 直到 dex 的id数量超过 65536. -auto-maindex # dex 扩展参数, 例如 --set-max-idx-number=50000 # 如果出现 DexException: Too many classes in --main-dex-list, main dex capacity exceeded,则需要调大数值 -dex-param --set-max-idx-number=50000 # 显示miandex的日志. -log-mainlist
如果我们想让某个class放在主包,剩下的都在其他包,我们可以先通过先输入包名,指定某个包下的所以class都在第二个dex中,再通过-keep指令,指定某个class在第一个包,这样可以达到了指定某个class在主包的效果。
接下来就只需要编译就行了。系统会自动生成maindexlist.txt也就是主包中的class列表。
编译前:
编译后:
这样分包就完成了。
相关文章推荐
- Android dex分包方案
- Android dex分包方案 (多dex)
- Android dex分包方案
- Android dex分包方案
- Android dex分包方案
- (4.4.15)Android dex分包方案
- [转]Android dex分包方案
- 【笔记】Android Studio Gradle配置dex分包
- dex分包方案
- Android dex分包方案
- dex分包方案
- 基于Dex分包方案---热修复、热更新、插件化
- dex分包方案
- dex分包方案概述与multidex包的配置使用
- android studio 初步的dex分包应用
- Android dex分包方案
- android dex文件超出限制个数分包方案
- Android dex 分包方案
- Android dex分包方案
- Android dex分包方案