1️⃣ 我们分包的时候会遇到一个问题,因为加载和初始化的问题,如果某个类不在mainDex中,那么程序就会报错,java.lang.NoClassDefFoundError。

2️⃣ 在gradle中我们使用了如下代码可以将指定类型分配到mainDex中:

afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
def listMain = project.rootDir.absolutePath+'/app/maindexlist.txt'
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
//改变dex方法数上线为50000,超过后进行拆分
dx.additionalParameters += '--set-max-idx-number=50000'
//方法数越界时则生成多个dex文件
dx.additionalParameters += '--multi-dex'
//maindexlist.txt文件为主dex中的类型配置文件
dx.additionalParameters += '--main-dex-list=' + listMain
//-main-dex-list指定的所有class会打包到主dex中
dx.additionalParameters += '--minimal-main-dex'
  
}
}
高版本的gradle需要使用如下方式配置:
dexOptions {
javaMaxHeapSize "4g"
preDexLibraries = false
additionalParameters = ['--multi-dex', '--main-dex-list=' + project.rootDir.absolutePath + '/app/maindexlist.txt', '--minimal-main-dex',
'--set-max-idx-number=1000']
} 其实我们可以直接参考app\build\intermediates\multi-dex\debug目录下的maindexlist.txt文件
在listMain中添加需要打进mainDex中的.class文件名称 如:
android/support/multidex/MultiDex.class
android/support/multidex/MultiDexApplication.class
android/support/multidex/MultiDexExtractor.class
android/support/multidex/MultiDexExtractor$1.class 重新编译 打包 反编译后 我们会在反编译后的jar中看到新增的class文件
具体multiDex分包配置可以参考 http://blog.csdn.net/gaozhan_csdn/article/details/51992100

  

												

Android将指定的.class打包到mainDex中的更多相关文章

  1. Android Gradle 指定 Module 打包

    Android Gradle 指定 Module 打包 项目中有许多的可以直接独立运行的 Module ,如何在 Gradle 中将签名文件配置好了,那么就不需要普通的手动点击 Generate Si ...

  2. Android学习第三天-打包常用命令

    在前面<Android学习第一天-adb常用命令>和 <Android学习第二天-android常用命令>两篇博文中,我们重点讲解了adb和android的常用命令,下面我们讲 ...

  3. android 通过eclipse混淆代码 打包 + proguard 总结

    android应用程序的混淆打包 1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示: target=android- ...

  4. 8. Android加载流程(打包与启动)

    移动安全的学习离不开对Android加载流程的分析,包括Android虚拟机,Android打包,启动流程等... 这篇文章  就对Android的一些基本加载进行学习. Android虚拟机 And ...

  5. Android系列之Android 命令行手动编译打包详解

    Android 命令行手动编译打包过程图 [详细步骤]: 1使用aapt生成R.java类文件:  例:  E:\androidDev\android-sdk-windows2.2\tools> ...

  6. Android Studio(十二):打包多个发布渠道的apk文件

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  7. 【Xamarin开发 Android 系列 13】 应用打包部署

    原文:[Xamarin开发 Android 系列 13] 应用打包部署 开始倒叙咯................ 先更新大宝部署吧,这个章节比较的Easy,童鞋们不用费脑筋.点解?从界面上填写几个参 ...

  8. 使用Android Studio时so文件打包不到APK中

    1,需要在build中添加如下配置,这是必备的 Android {   sourceSets {       main {           jniLibs.srcDirs = ['libs']   ...

  9. Android跑指定包Monkey脚本

    Android跑指定包Monkey脚本 adb shell monkey –p com.android.mms --throttle 1000 -v -v -v -s 1 --ignore-secur ...

随机推荐

  1. 今天科普一下 iOS马甲包审核以及常见审核问题

    一.什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法.马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致.    二. ...

  2. docker中的link

    一.查看容器的详细情形 docker inspect 容器id/名称 二.为什么要用link 容器每次重启时,ip都会变动,这不利于前端引用中连接数据库. 三.link docker run -p 8 ...

  3. 算法笔记_060:蓝桥杯练习 出现次数最多的整数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统 ...

  4. ES6 Promise catch

    getJSON方法返回一个 Promise 对象,如果该对象状态变为resolved,则会调用then方法指定的回调函数:如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定 ...

  5. for in 与 Object.keys 与 hasOwnProperty区别

    1.结论 for in遍历对象所有可枚举属性 包括原型链上的属性 Object.keys遍历对象所有可枚举属性 不包括原型链上的属性 hasOwnProperty 检查对象是否包含属性名,无法检查原型 ...

  6. android 从Activity 获取 rootView 根节点

    private static View getRootView(Activity context) { return ((ViewGroup)context.findViewById(android. ...

  7. Mybatis <if>标签

    格式:<if test=""> sql语句 </if> <select id="selectByName" resultType= ...

  8. iOS百度地图

    一.百度地图sdk具体使用过程,參考以下的博客(我感觉非常具体.并且有问题能够找楼主.他会给解答,感谢好心人-): 怎样使用百度地图sdk,及相关demo下载 上述博客给的demo,是真机执行的(百度 ...

  9. canvas学习笔记(中篇) -- canvas入门教程-- 颜色/透明度/渐变色/线宽/线条样式/虚线/文本/阴影/图片/像素处理

    [中篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  10. Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...