简单处理Android 65536方法越界问题

解决Android开发中的64K或65536错误问题 ProGuard将删除未使用的代码和资源,并缩小应用程序的方法数。使用ProGuard优化代码:通过使用ProGuard工具,您可以删除未使用的代码和资源,从而减少应用程序的方法数。根据您的具体情况选择适合您的解决方案,并记得在修改代码之前做好备份,并进行全面的测试以确做好备份,并进行全面的测试以确保应用程序的稳定性和功能的完整性。通过使用ProGuard,您可以删除未使用的代码和资源,并将应用程序的方法数减少到64K以下。如果您的应用程序使用了大量的库和依赖项,您可以考虑删除一些未使用的库和依赖项。 阅读详情

看到这篇文章相信大家都是遇到了这个问题的人,对,Android著名的方法65536越界问题,是什么原因造成的呢?

这是因为在Android的单个dex文件中所能包含的最大方法数为65536,这个包含了Android FrameWork 、依赖jar包积极应用本身的代码中的所有方法;当我们的方法数总量达到了65536的话,编译器就会抛出类似下面的异常:

Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2421Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72421Library UP-TO-DATE
:app:prepareComAndroidSupportMultidex100Library
:app:prepareComAndroidSupportSupportCompat2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCoreUi2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCoreUtils2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportFragment2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportMediaCompat2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2421Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJavaWithJavac
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
**Error:The number of method references in a .dex file cannot exceed 64K.**
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_92\bin\java.exe'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 18.62 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
```这里可能根据你的Android Studio版本不一样抛出的异常有点不一样,上面黑色粗体字的大体的意思就是“这个dex 文件的方法数量引用不能超过了64k”。

  解决方法如下:
 - 删除无用的代码和第三方库
 - 对于这个问题很多应用采用了插件来动态加载部分dex,通过将dex拆分为多个dex,这样可以解决方法越界的问题,但是插件化是一种重量级的技术方案,兼容问题较多,所以这里不用插件化解决
 - 2014年Google提出了multidex的解决方案,也就是本文要实现的一种方案,使用起来更简单!

 - 在我们的IDE Android Studio中的module的gradle中配置如下图所示





<div class="se-preview-section-delimiter"></div>

这里写代码片
“`

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
    defaultConfig {
        applicationId "com.sinodata.method"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:multidex:1.0.0'
}

其中将
defaultConfig {
applicationId “com.sinodata.method”
minSdkVersion 16
targetSdkVersion 24
versionCode 1
versionName “1.0”
multiDexEnabled true
}
multiDexEnable true 是关键
dependencies {
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
testCompile ‘junit:junit:4.12’
compile ‘com.android.support:appcompat-v7:24.2.1’
compile ‘com.android.support:multidex:1.0.0’
}
compile ‘com.android.support:multidex:1.0.0’使用这个关键库

  • 最后在代码中加入multidex的功能,有三种方式可以选择
  • 1.在manifest中指定Application为MultiDexApplication
  • 这里写图片描述
    2.让自己的应用继承MultiDexApplication
    3.不想让自己的应用继承MultiDexApplication,还可以选择重写Application的attachBaseContext方法,它比Application的onCreate()要先执行,如下所示 @Override
    protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
    }

  • 在这里说明下,因为打包成了多个dex,启动的时候相对正常情况会比较慢!

Android应用中突破65536方法限制的Multidex文件解决方案 为了解决方法数超限的问题,Android引入了Multidex支持。Multidex是指在单个应用中使用多个DEX文件来组织和管理代码。这样,开发者能够突破65K方法的限制,将应用拆分成多个DEX文件。对于复杂的应用,可以有效避免方法数的限制,确保所有需要的类和方法都能够被正确加载和使用。随着Android系统版本的不断更新和新技术的引入,Multidex技术也在不断地适应和进化。例如,Android 7.0引入了Project Treble,旨在隔离硬件抽象层(HAL),简化系统更新过程。 阅读详情

相关推荐

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

Android 65536 详解!

异常: trouble writing output: Too many field references: 131000; max is 65536. You may try using --multi-dex option. //或者: Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 原因: 65536。此数字是单个 Dalvik Executable (D

shenyang的博客 1060

无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架

Solon 是新一代,Java 企业级应用开发框架。是杭州无耳科技有限公司的“根级”开源项目(最近“杭州六小龙”很火啊,我们也是杭州的哦)。从零开始构建(No Spring、No Java-EE、No Servlet),有灵活的接口规范与开放生态。采用对商用友好的 Apache 2.0 开源协议。

向往自由的少年!(我是一个少年!!!) 1697

Android 解决65536

解决64K限制,当你的应用及其引用的库超过 65,536 个方法时,你会遇到构建错误,表明你的应用已达到 Android 构建架构的限制。

帅次的博客 2104

SillyTavern角色卡制作全攻略:如何用AI还原你喜欢的虚构角色(附三叶完整角色卡JSON)

本文详细介绍了如何使用SillyTavern制作高质量AI角色卡,以《你的名字》中的宫水三叶为例,从角色特征提取、对话风格捕捉到JSON结构优化,全面解析AI角色扮演的创作技巧。通过具体的写作示例和完整角色卡JSON,帮助二次元爱好者和同人创作者实现虚构角色的精准还原与生动互动。

pandas7gardener的博客 2130

有限元法(Finite Element Method,FEM)原理详解

有限元法( FEM )是一种流行的方法,用于数值求解工程和数学建模中出现的微分方程。

车手只需要车和手,压力来自轮胎 7万+

Android中65536问题剖析

问题出现的原因是因为导入融云通信的包后,突然提示: Error:The number of method references in a .dex file cannot exceed 64K. Learn how to resolve this issue athttps://deve...

chuanlvshun2065的博客 2714

华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具

参考文档1这个工具可以完美替代华硕奥创中心工具,可以定制化不同模式下的CPU、GPU、风扇转速、电池计划等。是由华硕开发人员开发的一个纯绿色的系统管理工具。直接展示启动后的工具界面效果图:这个工具也可以一键式停止正在运行的华硕ASUS服务,减少不必要的资源消耗。

追梦&天空的博客 1万+

Android 解决65536(1),想提高开发效率的必看

defaultConfig { … minSdkVersion 15 targetSdkVersion 30 multiDexEnabled true } … } dependencies { implementation “androidx.multidex:multidex:2.0.1” } 不使用AndroidX(已弃用) android { defaultConfig { … minSdkVersion 1

m0_64319112的博客 422

37、基于铁电场效应晶体管(FeFET)的片上深度神经网络(DNN)直接反馈对齐训练

本文提出了一种基于铁电场效应晶体管(FeFET)的深度神经网络(DNN)训练加速器架构,结合直接反馈对齐(DFA)算法和FeFET的独特物理特性,以解决当前DNN训练中反向传播(BP)算法带来的高计算开销、复杂数据依赖和高能耗问题。通过设计基于FeFET的MVM引擎、低功耗ADC和随机数生成器(RNG),该架构在速度和功率效率方面相比现有基于ReRAM的加速器分别提升了1.3倍和2.5倍。研究为未来高效能AI训练硬件的发展提供了新的思路和实现路径。

wine的专栏 163

Firefox卸载卡住不动的解决方案

本文主要介绍了Firefox卸载卡住不动的解决方案,希望能对使用Windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 15万+

Android开发——解决方法数越界问题

0. 前言单个DEX文件能够包含的最大方法总数为65536。通常APK包含一个classes.dex文件,因此Android应用的方法总数不能超过这个数量,这包括Android框架、第三方类库和你自己开发的代码。通常开发者自己的代码很难达到这样的方法数量限制,但随着第三方类库的加入,方法数就会迅速膨胀。也许有一天,这个错误就会找上门来:com.android.dex.DexIndexOverFlo...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1233

SE模块理解+SE-Resnet模块pytorch实现

文章目录SE模块理解SE实现注意力机制原因SE-resnet网络pytorch实现定义residual定义SE模块 SE模块理解 SENet是Squeeze-and-Excitation Networks的简称,拿到了ImageNet2017分类比赛冠军,其效果得到了认可,其提出的SE模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet主要是学习了channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。 SE模块广泛应用于去噪,去雨方向,利用SE模

qq_42754919的博客 2万+

Android使用multidex解决方法数越界问题65536

概述:在Android中单个dex文件能包含的最大方法数为 65536 。 这个方法数目来自,Android FrameWork,一依赖包,已经代码中包含的方法,还有些项目使用的第三方库里面的方法 的总和。乍一看这个数字很大,一般不会超过。但是随着App的更新速度火箭般提高,和用户的各种需求大量增加,最终在产品汪的指挥下,项目越来越大。现如今,只要是比较大型的项目,都会遇到 65536 问题。问题描

路漫漫亦无涯 3418

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

解决Android单个dex文件不能超过65536个方法问题

当我们的项目代码过大时,编译运行时会报Unable to execute dex: method ID not in[0, 0xffff]: 65536)错误。当出现这个错误时说明你本身自己的工程代码中含有的太多的方法,或者你的工程lib文件夹下引用的第三方插件jar包有太多的方法,这两者...

chunqingtai2922的博客 262

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android工程中方法数超过65536解决方法

Android工程中方法数超过65536解决方法 1 “64k引用限制” 随着APP的不断迭代,自身代码在不断增加,同时项目中由于使用了不少的三方库,这时候方法数超过了65536,带来的后果就是编译和打包失败。 当方法数超过65536的时候,会报如下的错误: The number of method references in a .dex file cannot exceed 64K. Caused by: com.android.tools.r8.utils.AbortException: Error:

xingyu19911016的博客 2919

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

eclipse 上解决方法数超过65536问题

前言 现在android 开发都是使用Android Studio进行开发的,对于这个问题特别简单,但是在eclipse上就有的捉急了。为什么要自讨苦吃呢,我也不想,总是有些老项目到现在还需要维护,多引用几个第三方,分分钟65536。废话不多说,讲讲解决思路,遇到这个问题吗,我首先google了一下,选择android-support-multidex.jar的方式,顺便吐槽一下,那些只知道乱复...

风吹过wu的博客 2143

【产品经理】Android 系统的 65536

Android 初期的系统工程师可能完全没有预计到,在 Android 平台上,应用复杂度的增长会如此之快,竟然将 Class.dex 文件的方法数上限限制在了65536的范围内,如今供的 Multi-Dex 方案也无法让 Android 开发者从无尽的精简方法数斗争中解脱出来,作为一个 Android 程序猿,我只想说天长地久有时尽,此恨绵绵无绝期!天下的道理总是相通的。当然,今天要讲的65536并不是 Excel 中的65536,而是早期的 Android 系统给应用开发者留下来的一个坑,一个天坑!

qq_41843727的博客 584

android 65536 简书,app编译打包时的65536问题

两种情况,第一种:第一种non-jumbo instructionUNEXPECTED TOP-LEVEL EXCEPTION:com.android.dex.DexIndexOverflowException:Cannot merge new index 65562 into a non-jumbo instruction!如果报Cannot merge new index 65562 int...

weixin_39891694的博客 180

dexindexoverflowException 65536 的问题

先上图描述一下问题 程序报如上的错误,刚开始以为是UNEXPECTED TOP-LEVEL EXCEPTION,然后各种百度,说是有可能包重复导入了,包冲突,各种检查不行。后来同事说应该是method ID not in [0, 0xffff]: 65536这句话的问题,以为是找不到方法,一百度,原来是项目方法数不能超过65536个,然后各种百度,结果有:然后换到谷歌,找到了原来是有些b

AexLinda的专栏 1894

Android应用方法数65536的限制问题

随着应用程序功能不断的丰富,总有一天你会遇到一个异常: Conversion to Dalvik format failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536 那么让我们看一下为什么会引起这种错误:         在Android系统中,一个App的所有代码都在一个Dex文件里面。

C_583202545的专栏 2044

android studio 不同电脑不同65536,如何解决Android65536限制问题

作为一个Android程序员,当你遇见这个错误的时候,Unable to execute dex: method ID not in[0, 0xffff]: 65536。恭喜你。这说明你的app版本已经迭代的几个版本了。至少在广大的用户心中有那么一席之地。那么这个问题是如何出现的呢?下面我为大家介绍一下,这个问题出现的原因,已经我是怎么解决的。问题出现原因:在Android系统中,一个App的所有...

weixin_39856265的博客 320

解决Android方法数限制的神器:Dex 65536

解决Android方法数限制的神器:Dex 65536 在Android开发中,我们可能会遇到这样一个错误:“Unable to execute dex: method ID not in [0, 0xffff]: 65536”。这通常是因为我们的应用引入了大量第三方库,导致超过了方法数的限制。现在,有一个开源项目Dex 65536,它可以帮你解决这个问题。 项目介绍 Dex 65536 是一个巧...

gitblog_00028的博客 486
上一篇: AndroidEventBus
下一篇: Android view源码解析
RayXiong
博客等级 码龄10年 8粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值