首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 使用android-support-multidex解决Dex超出方法数的限制问题

随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多),相信很多人都遇到过如下的错误: UNEXPECTED TOP-LEVEL...那么让我们看一下为什么会引起这种错误:         在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。...,欢迎到Github上积极参与...常见问题 DexException: Library dex files are not supported in multi-dex mode,你可能会见到如下的错误: Error:Execution... dex files define L{package}/BuildConfig;   如果遇到这个错误请进行如下检查: 1.

1.5K80

学(kao)习(bei)官方关于64k异常处理 ^_^

: Unable to execute dex: method ID not in [0, 0xffff]: 65536 较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题: trouble...DEX 文件的过程相当复杂,如果辅助 DEX 文件较大,可能会导致应用无响应 (ANR) 错误。...可执行文件分包的应用可能无法在运行的平台版本早于 Android 4.0(API 级别 14)的设备上启动。...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前的 Android 版本上,应用仍有可能遭遇这一限制。...这些设置会使适用于 Gradle 的 Android 插件执行以下操作: 执行 pre-dexing:将每个应用模块和每个依赖项构建为单独的 DEX 文件; 将每个 DEX 文件加入 APK,并且不做任何修改

97520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    android开发 加载so库的解析和出现的各种错误分析

    在Android系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64 也就是说我们要想支持全部系统的手机需要放全所有不同版本的...64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART...(后续补充) 基本上大部分关于so库的错误 都是   java.lang.UnsatisfiedLinkError 官方解释     Throw if the java Virtural Machine...所以看到这个错误,一般常见的几种情况分析。 1、低级错误——根本木有SO,你加载个球啊!...修复方式     添加SO:libs\armeabi\libBugly.so或加载代码注释掉://System.loadLibrary(Bugly) ; 2、进阶错误——根本木有X86的SO,在X86的设备上你加载个球啊

    2.4K10

    实习杂记(31):android多dex方案二

    这一章是在继续学习android多dex之前必须要准备的知识 作为一个android开发者,在开发应用时,随着业务规模发展到一定程度,不断地加入新功能、添加新的类库,代码在急剧的膨胀,相应的apk包的大小也急剧增加..., 那么终有一天,你会不幸遇到这个错误: 生成的apk在android 2.3或之前的机器上无法安装,提示INSTALL_FAILED_DEXOPT 方法数量过多,编译时出错,提示: Conversion...对于DEX文件,则是将工程所需全部class文件合并且压缩到一个DEX文件期间,也就是Android打包的DEX过程中, 单个DEX文件可被引用的方法总数(自己开发的代码以及所引用的Android框架、...在类加载过程中,解析类数据字段增加了不必要的开销。访问数据值如int,string类型的时候,直接用C类型值可能更好。这个过程opt也可以帮你处理。...虚拟机缓存的目录一般是:$ANDROID_DATA/data/dalvik-cache 里面的文件命名都是来源于DEX源文件完整路径,在一台设备上,这个目录是被系统拥有,有0771权限,优化DEX文件存在在那里

    1K40

    Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^

    前言 随着APP的一次又一次迭代,APP的体积也越来越大,这时候,会引发这么一个问题,早期的错误异常如下: ? 较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题: ?...DEX 文件的过程相当复杂,如果辅助 DEX 文件较大,可能会导致应用无响应 (ANR) 错误。...可执行文件分包的应用可能无法在运行的平台版本早于 Android 4.0(API 级别 14)的设备上启动。...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前的 Android 版本上,应用仍有可能遭遇这一限制。...这些设置会使适用于 Gradle 的 Android 插件执行以下操作: 执行 pre-dexing:将每个应用模块和每个依赖项构建为单独的 DEX 文件; 将每个 DEX 文件加入 APK,并且不做任何修改

    83410

    Redex 初探与 Interdex:Andorid 冷启动优化

    PS:本篇提到的冷启动速度优化,不包括Android 5.0及以上系统 一、redex的使用与坑 1.安装与使用 使用redex的第一个坑就是环境。...在redex中,大部分优化原理都需要解析dex格式,从中还原出引用、继承关系,加以分析,工作量巨大。...redex的做法应该是解析出所有dex中的类,再按配置的加载类序列,从主dex开始重新生成各个dex,所以会打乱原有的dex分布。...Android编译时把.class转换成.dex是依靠dx.bat,这个工具实际执行的是sdk中的dx.jar。我们可以修改dx的源码,替换这个jar包,就可以执行自定义的dx逻辑了。...想从dex中解析一个类必须要先从classDef段找到类定义,从中找到类包含的各种信息的偏移地址,再从对应地址去读取数据,所以要调整dex的类排列顺序,理论上只需要对classDef段修改即可。

    3.5K61

    Android连接 Mysql: 解决mysql-connector-java驱动编译时Dex cannot parse version 52 byte code...等错误

    : java.lang.RuntimeException: java.lang.RuntimeException: Unable to pre-dex '/Users/jack/.gradle/caches...因此想到了在Android端用mysql-connector-java驱动包直接访问服务器上的数据库(首先说明这是可行的)。...)Build没有任何问题,但是在构建APK的时候出错了,错误也就是文章开头那个。...错误的意思大概是这个包不支持Java8(52是Java8的字节码版本号),需要你去build.gradle里手动修改项目的兼容性到1.7。网上查了很多很多资料都是这个解决办法,然而并无用。...然后我在Intellij IDEA下建了个普通的Java工程,连接数据库的代码不变,同样引入jar包,居然成功了(能够远程连接我云服务器上的数据库并进行数据操纵)。

    1.5K30

    闲聊MultiDex

    Android使用Multidex突破64K方法数限制原理解析 简单地来说,MultiDex 做的事情就是: 解压得到 dex 并进行 dexOpt ; 把主dex文件除外的 dex 文件都追加到 PathClassLoader...文件的过程相当复杂,如果辅助 DEX 文件较大,可能会导致应用无响应 (ANR) 错误。...• 由于存在 Dalvik linearAlloc 错误(问题 22586),使用 Dalvik 可执行文件分包的应用可能无法在运行的平台版本早于 Android 4.0(API 级别 14)的设备上启动...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前的 Android 版本上,应用仍有可能遭遇这一限制。...Reference 配置方法数超过 64K 的应用 类加载机制系列3——MultiDex原理解析 Android使用Multidex突破64K方法数限制原理解析 其实你不知道MultiDex到底有多坑

    92510

    闲聊MultiDex

    Android使用Multidex突破64K方法数限制原理解析 简单地来说,MultiDex 做的事情就是: 解压得到 dex 并进行 dexOpt ; 把主dex文件除外的 dex 文件都追加到 PathClassLoader...文件的过程相当复杂,如果辅助 DEX 文件较大,可能会导致应用无响应 (ANR) 错误。...• 由于存在 Dalvik linearAlloc 错误(问题 22586),使用 Dalvik 可执行文件分包的应用可能无法在运行的平台版本早于 Android 4.0(API 级别 14)的设备上启动...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前的 Android 版本上,应用仍有可能遭遇这一限制。...Reference 配置方法数超过 64K 的应用 类加载机制系列3——MultiDex原理解析 Android使用Multidex突破64K方法数限制原理解析 其实你不知道MultiDex到底有多坑

    1K10

    Android系统启动——4 zyogte进程 (C篇)

    则调用** open_console()函数**打开设备文件"/dev/sonsole",然后把标准输出、标准输入、标准错误重定向到该设备文件上。...Android在4.4上正式推出基于SELinux的系统安全机制 在Linux中,PR_SET_NO_NEW_PRIVS 当一个进程或者子进程设置了PR_SET_NO_NEW_PRIVS属性,则其不能访问一些无法...)函数通过调用register_jni_procs()函数将全局的gRegJNI中的本地JNI函数在虚拟机中注册,这部分的解析请参考3、Android跨进程通信IPC之3——关于"JNI"的那些事中的4...从这个角度来看,在应用安装的过程中将dex字节码翻译成本地机器码对原来的应用安装流程基本上就不会产生什么影响。...和NoClassDefFoundError 第十九步:配置NativeBridge中间模块,从Android 5.0,开始在其ART的实现中,引入了一个叫做NativeBridge的中间模块,这个模块基本上就是为了

    2.8K21

    Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

    添加Action按钮 ActionBar还可以根据应用程序当前的功能来提供与其相关的Action按钮,这些按钮都会以图标或文字的形式直接显示在ActionBar上。...这里我们注意到,显示在ActionBar上的按钮都只有一个图标而已,我们在title中指定的文字并没有显示出来。...这就是ActionBar导航和Back键在设计上的区别,那么该怎样才能实现这样的功能呢?其实并不复杂,实现标准的ActionBar导航功能只需三步走。...比如我们启动一个有Menu键的模拟器,然后将代码运行到该模拟器上,结果如下图所示: ? 可以看到,ActionBar最右边的overflow按钮不见了!...完全解析,使用官方推荐的最佳导航栏(下)。

    3.4K101

    Tinker原理

    ", "tinker.sample.android.app.BaseBuildInfo" ] 这个配置中的类不会出现在任何全量补丁dex里,也就是说在合成后,这些类还在老的dex文件中,比如在补丁前dex...但是AOT有个缺点就是每次执行的时间都太长了,并且占用的ROM空间又很大,所以在Android N上Google做了混合编译同时支持JIT和AOT。...Qzone的那套热补丁为了消除这个错误采用插庄的方式来规避,Tinker采用全量dex的方式来规避该问题,那为什么还会出现呢。 根据log找到了报错点是在工具类A中的一个直接引用类B的方法中报错。...错误原因在加载补丁dex一节其实已经提到一些,我们引用过来,这个配置(dex.loader)中的类不会出现在任何全量补丁dex里,也就是说在合成后,这些类还在老的dex文件中,比如在补丁前dex顺序是这样的...B的话就会报该错误。

    62410

    Android dex文件64k限制解决办法

    这些变化,除了会导致打包出的 APK 文件越来越大之外,当项目中java代码包含的方法数(method count)超出一个峰值时,编译过程中就会出现如下错误: 较早版本的编译系统中,错误内容如下: Conversion...尽管在不同版本的编译系统中显示的错误内容不尽相同,但内容中都提到了一个具体的数字:65536,这个数字也是本文要讲到的核心内容:Android 64K Method Counts Limit 的峰值。...Config for Multidex With Gradle ---- Android Gradle 插件在 Android SDK Build Tools 21.1 及更高版本的编译工具上支持multidex.../ to pre-dex each module and produce an APK that can be tested on // Android Lollipop without...strings count limit ---- 前面我们说完单一 dex 文件的方法数限制,事实上,还有一个字符串数量限制。

    1.2K20

    Android属性动画完全解析(上),初识属性动画的基本用法

    对于逐帧动画和补间动画的用法,我不想再多讲,它们的技术已经比较老了,而且网上资料也非常多,那么今天我们这篇文章的主题就是对Android属性动画进行一次完全解析。 为什么要引入属性动画?...注意上面我在介绍补间动画的时候都有使用“对View进行操作”这样的描述,没错,补间动画是只能够作用在View上的。...说白了,之前的补间动画机制就是使用硬编码的方式来完成的,功能限定死就是这些,基本上没有任何扩展性可言。...它实际上是一种不断地对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性。...和ObjectAnimator的高级用法,感兴趣的朋友请继续阅读 Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法 。

    1.6K70

    【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )

    getCodeCacheDir(); * }pre> * * 不要在外部存储上缓存优化的类 * 外部存储不提供保护您的计算机所需的访问控制 * 防止代码注入攻击的应用程序...解释类可以在包含的一组DEX文件中找到 * 在Jar或APK文件中。...* * @param dexPath包含类和 * 资源,由{@code File.pathSeparator}分隔,其中 * Android上的默认值为{@code”:“} * @param...加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 ) 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList...函数 | 构造函数 | openDexFile 函数 ) 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp

    30930

    微信Tinker的一切都在这里,包括源码(一)

    Android N的挑战 信心满满上线后,却很快收到华为反馈的一个Crash: 而且这个Crash只在Android N上出现,在当时对我们震动非常大,难道Android N不支持Java方式热补丁了...难道这两个月的辛苦都白费了吗?一切想象都苍白无力,只有继续去源码里面找原因。 在之前的基础上,这一块的研究并没有花太多的时间,主要是Android N的混合编译模式导致。...更多的详细分析可参考文章:Android N混合编译与对热补丁影响解析。 三. 厂商OTA的挑战 刚刚解决完Android N的问题,还在沉醉在自己的胜利的愉悦中。...这就非常好理解了,因为OTA之后系统image改变了,odex文件用到image的偏移地址很可能已经错误。...2、Rom体积问题;一个10M的Dex,在Dalvik下odex产物只有11M左右,但在Art平台,可以达到30多M; 3、Android N的问题;Android N在混合编译上努力,被补丁全量合成机制所废弃了

    4.6K20

    微信Tinker的一切都在这里,包括源码(一)

    Android N的挑战 信心满满上线后,却很快收到华为反馈的一个Crash: 而且这个Crash只在Android N上出现,在当时对我们震动非常大,难道Android N不支持Java方式热补丁了...难道这两个月的辛苦都白费了吗?一切想象都苍白无力,只有继续去源码里面找原因。 在之前的基础上,这一块的研究并没有花太多的时间,主要是Android N的混合编译模式导致。...更多的详细分析可参考文章《Android N混合编译与对热补丁影响解析》。 三. 厂商OTA的挑战 刚刚解决完Android N的问题,还在沉醉在自己的胜利的愉悦中。...,因为OTA之后系统image改变了,odex文件用到image的偏移地址很可能已经错误。...Rom体积问题;一个10M的Dex,在Dalvik下odex产物只有11M左右,但在Art平台,可以达到30多M; Android N的问题;Android N在混合编译上努力,被补丁全量合成机制所废弃了

    48810

    Android Patch 方案与持续交付

    在安卓系统上,可以通过 hotfix 的思路来达到这一目的:下发补丁文件,更新 App 版本。 站在巨人的肩膀上 在今年 3 月份开始做技术选型的时候把上面的几种方案试了一轮。...dex分包 Qzone 方案下发的 patch 文件是变更过的 Java 类组成的 patch.dex,在 dalvik 和 ART 虚拟机下分别需要解决 Class ref in pre-verified...由于 Android 系统在安装 apk 时候已经把 AndroidManifest.xml 文件解析并写入到系统中,目前还不支持修改四大组件,比如增加 Activity。...当前的开源方案并不能满足我们加速 bug处理和版本迭代速度的需求,于是有了站在巨人肩膀上的思考和我们现在的 patch 方案。...从我们团队发布的多个 patch 版本来看,下发的 diff 结果文件稍大。大文件下载过程可能出现的错误也会间接影响到 patch 铺开的速度,所以我们也在尝试更好的 diff 方案。

    1.3K50
    领券