apk dex android 太多,一个APK中包含多个dex方法

原因

每个单独的dex(Dalvik Executable)文件中的方法id范围为[0, 0xffff]:65536,包括安卓系统框架,三方库和自己写得代码中的方法。所以如果你的工程很大,包含了超过65536的方法,那就需要用multiDex技术。

Android 5.0之前和之后的解决方案

在5.0之前所使用的Dalvik运行时默认的一个apk中只能包含一个dex文件。为了解决这个限制,我们可以使用multidex support库,它会成为主dex的一部分,用来取得其它辅助dex文件中的方法。

com.android.support:multidex:1.0.0

在5.0之后,Android改用ART作为运行时,ART天生支持一个APK中包含多个dex文件。因为它在APK安装时,会预先扫描所有的classes(..N).dex文件,把它们编译合成一个.oat的可执行文件。

解决方法

android {

compileSdkVersion 21

buildToolsVersion "21.1.0"

defaultConfig {

...

minSdkVersion 14

targetSdkVersion 21

...

// Enabling multidex support.

multiDexEnabled true

}

...

}

dependencies {

compile 'com.android.support:multidex:1.0.0'

}

注意:buildToolsVersion必须为21.1或者更高。

package="com.example.android.multidex.myapplication">

...

android:name="android.support.multidex.MultiDexApplication">

...

当以上这些设置后,Android build工具会创建一个主dex和按照需要创建一些辅助的dex(classes2.dex, classes3.dex)。构建系统会把它们一起打包到apk中。

后记

multidex support库还是有些限制的,比如应用可能在Android 4.0之前版本的手机上因为Dalvik linearAlloc bug(Issue 22586)无法运行,也可能会因为multidex配置占用内存分配过大而导致运行奔溃等等。所以运用改技术时需要大量测试。所以最好避免dex限制的方法还是从编写代码时考虑,删除无用引用,用ProGuard做代码优化等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
===================================================================   本工具,直接在【鼠标右键】创建快捷菜单;   非常方便汉化工作者对APKDex文件的编译操作;   工具箱集合了,当今最强悍,最犀利的APKDex文件编译工具;   【注意:反编译文件名称 不能用文,否则无法回编译。】 ___________________________________________________________________ 使用说明:   本工具执行安装后,直接在【鼠标右键】生成快捷键,自动关联APKDEX、 Odex、Zip文件。只要在电脑任意非分区根目录,【鼠标右键】点击相关文件,即 可编译操作。如,反编译APKDEX文件,反编译后生成可编译的同名文件夹, 汉化修改完成后,对文件夹点击【鼠标右键】根据文件夹反编译前的文件类型, 现在【回编译XXX文件】即可!   同时,针对apk和zip文件增加签名操作,只要【鼠标右键】点击,选择 【签名XX文件】即可!签名前无需删除原来的【META-INF】签名数据。本工具会 判别apk还是zip并自动删除签名数据。 ___________________________________________________________________ 常见问题:   1、被杀毒软件拦截误杀(安装前,关闭杀毒软件)   2、没有管理员权限(右键以管理员身份运行C:\Apkdb\安装.exe)   3、UAC限制 安装过程没有写入注册表提示,直接显示安装完成   (右键 我的电脑-管理-本地用户和组-用户-Administrator(√ 密码永不过期)   4、安装成功,安装过程有写入注册表提示,但是右键APK 没有菜单   (检查是不是安装了PC版的手机管理工具,关联了APK文件)   5、安装后无法编译文件,提示JAVA 错误   (未安装JAVA平台,或安装错误。请卸载后重启电脑,重装再次重启电脑)   6、安装成功后,编译文件提示 “Can't create the output directory \\****\smali”   (拜托,这是文件夹 没有写入权限。是不是在硬盘分区根目录编译了?    Apktool不能在磁盘分区,如C盘 D盘 根目录进行编译!    如果不是根目录,请检查apk文件名称是不是有问题,如文件名结尾空格。)   7、能反编译,但无法回编译   (可能是被旧版本的Apktool编译过,可以试试用旧版的反编译,在用新版的回编译)   8、其他小白问题,上QQ群提问,不要单独Q我,谢谢! ___________________________________________________________________ 更新特性: v.1.6.5 2011.12.07   1.更新,手动选择编译工具Apktool版本   2.保留,出错自动切换Apktool其他版本   3.更新,回编译无Dex 工具保留“smali”源码文件   4.更新,合并OdexApk 采用Baksmali1.3.0版并自动切换API等级   5.更新,Apktool v1.4.2为文版   6.增强,兼容各类PC版APK安装器(无需删除APK关联)   7.其他微调整
APK+Dex文件反编译及回编译工具》 简称:APKDB 是一款,针对Android OS系统的APK程序,直接反编译修改的工具。 APKDB集合了当今最强悍,最犀利的APKDex文件编译工具; 正常安装后,它直接在【鼠标右键】创建快捷菜单; 非常方便汉化工作者,对APKDex文件进行简易的反编译回编译操作 1.本工具必须先安装JAVA7; 2.如需显示APK自身图标必须先安装.NET Framework4 · 对*.Apk 文件 反编译 及 回编译 用于汉化修改 · 对*.Dex 文件 反编译 及 回编译 或查看详细源代码 · 对*.Apk 文件 批量反编译 及 回编译 · 对*.Apk、*.Zip 文件执行签名 · Windows下直示Apk件自身图标 v2.0.2 正式版 2016.06.05 *.更新,ShakaApktool v2.0.0(2016.06.01) *.更新,Apktool v2.1.1正式版(2016.05.07) *.更新,7-zip压缩工具版本到16.02 *.更新,smali、baksmali v2.1.2(2016.03.28) *.更新,ADB工具 (25.1 rc1版) *.更新,Zipalign优化工具 (23.0.3版) *.更新,合并Odex文件 *.更新,XML编辑器(提升速度,修复bug) *.更新,显示APK自身图标(Apkshellext v2.0.1.5780.2290) *.更新,刷机精灵APK安装器 *.新增,自定义默认签名,可用自己制作的签名签名 *.新增,Keytool签名制作工具,推荐使用JAVA8 *.新增,极限压缩优化APK内图片功能 *.新增,PNG图片优化工具OptiPNG v0.7.6 *.新增,设定默认Apktool版本(回车键直接执行) *.新增,ShakaApktool自定义操作 *.新增,选项,不反编译Resources、Classes文件 选择后(可同时使用),再选择使用Apktool工具。 *.新增,反编译jar文件时,自动识别是否含多个dex文件,并使用ShakaApktool反编译 *.新增,反编译JAR文件后,回编译时自动合并并转移到反编译目录内 右键[APK文件]、[RSA文件]、[original]目录、[META-INF]目录 可直接查看签名信息。 *.新增,创建[开始菜单-所有程序-APKDB]目录 *.新增,精简APK语言功能(仅保留英文、简体文、繁体文) *.增强,对繁体系统的兼容 *.增强,右键菜单判别准确率 *.增强,重新调整右键菜单,强制关联所有文件 *.增強,针对不同系統的兼容性 *.修复,XP签名优化出错问题 *.修复,选项按键滞留问题 *.修复,文件名含空格优化失败问题 *.修复,签名遗留旧文件,删除框架文件… *.修复,卸载出错问题 *.修复,APK安装器不关联问题 *.修复,个别APK文件反编译时停顿问题 *.修复,修改AndroidManifest.xml回编译没变化问题 *.修复,各种小问题 *.优化,整体兼容性,增加选项状态提示 *.优化,界面调整 *.优化,安装过程 *.优化,对JAVA路径的判别 *.优化,对64位系统的支持 *.优化,执行脚本 *.优化,编译过程 *.优化,DEX文件夹的的判别 *.删减,旧版APKTOOL(2.0.0以下版本) *.其他,一些微调整

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值