android开发,解决65535方法数超过限制问题

Android方法数超过65535的解决办法 文章目录1. 导包2. 配置注意事项 1. 导包 //===================multidex implementation 'com.android.support:multidex:1.0.1' 2. 配置 配置有两种方式: 第一种,在Application代码声明: @Override public void onCreate() { su... 阅读详情

1、采用手动方式合并jar文件,将要合并的jar文件解压到同一目录下。然后将该目录压缩成libs.zip,再重命名为libs.jar。

合并jar包:

①将要合并的JAR包放到同一个文件夹下;

②命令行下定位到当前文件夹;

③通过jar解压命令将jar包全部解压,命令为>jar –xvfxx.jar;//xx 是目标jar包名。

④删除目录下的.jar文件,命令为>del /F *.jar;

⑤合并所有的.class文件至jar,命令为>jar –cvfMlibs.jar .,注意:jar .

 

2、使用Android SDK提供的dx工具将libs.jar转换为dex文件,命名为classes.dex。//classes 与后续代码里的classes.apk名字对应。

打开命令行工具,进入到dx.bat所在的目录下,执行命令

如:dx --dex --output=D:\test\classes.dex D:\test\libs.jar           //注意空格

dx工具可以在Android SDK下找到,如\SDK\build-tools\23.0.1\dx.bat

D:\test\classes.dex为打包生成的dex文件的目标路径,D:\test\libs.jar为jar文件的路径

3、将上一步打包生成的classes.dex添加为压缩文件classes.zip,然后重命名为classes.apk

 

4、将classes.apk放入项目的assets文件夹下。

 

5.将步骤1中的被分出的jar包从项目libs文件夹下删除,将合并后的jar包依照外部jar的方式引入项目,android.jar就是采用了此种依赖方式。

 

项目--右键--Build Path--Configure Build Path --- Libraries ---AddExternal JARs

 

项目--右键--Build Path--Configure Build Path --- Libraries —AddJARs选择

assets文件下。//针对Window上开发,mac上打包。

 

 

6、在项目的Application中添加下面的方法

 

public classApp extends Application {

 

    @Override

    public void onCreate() {

       super.onCreate();

       dexTool();

    }

 

/**

     * Copy the following code andcalldexTool() after super.onCreate() in

     * Application.onCreate()

     * <p>

     * This method hacks thedefaultPathClassLoader and load the secondary dex

     * file as it's parent.

     */

    @SuppressLint("NewApi")

    private void dexTool() {

 

        File dexDir = newFile(getFilesDir(),"dlibs");

       dexDir.mkdir();

        File dexFile = newFile(dexDir,"libs.apk");

        File dexOpt = newFile(dexDir,"opt");

        dexOpt.mkdir();

        try {

           InputStream ins =getAssets().open("libs.apk");

           if (dexFile.length() !=ins.available()) {

               FileOutputStream fos = newFileOutputStream(dexFile);

               byte[] buf = new byte[4096];

               int l;

               while ((l = ins.read(buf)) !=-1) {

                   fos.write(buf, 0, l);

               }

               fos.close();

           }

           ins.close();

        } catch (Exception e) {

           throw new RuntimeException(e);

        }

 

        ClassLoader cl =getClassLoader();

        ApplicationInfo ai=getApplicationInfo();

        String nativeLibraryDir= null;

        if(Build.VERSION.SDK_INT > 8) {

           nativeLibraryDir =ai.nativeLibraryDir;

        } else {

           nativeLibraryDir ="/data/data/" + ai.packageName +"/lib/";

        }

        DexClassLoader dcl =newDexClassLoader(dexFile.getAbsolutePath(),

               dexOpt.getAbsolutePath(),nativeLibraryDir, cl.getParent());

 

        try {

           Field f =ClassLoader.class.getDeclaredField("parent");

           f.setAccessible(true);

           f.set(cl, dcl);

        } catch (Exception e) {

           throw new RuntimeException(e);

        }

    }

}

注:Application 中的静态全局变量会比MutiDex的instal()方法优先加载,所以建议避免在Application类中使用引用classes.dex文件的静态变量

至此,问题解决。

Android-记一次bugfix-主dex包数超过65535 问题产生和解决过程 问题描述 打包的时候总是提示: com.android.dex.DexException:Too many classes in --main-dex-list, main dex capacity exceeded 问题原因 因为主dex包中的方法数超过65535,导致生成包失败。 追溯问题: if (args.mainDexListFile != null) { //... 阅读详情

相关推荐

Android进阶之使用multidex(产生多个dex)解决Dex超出方法数65535的限制

1 概述1.1 为什么要拆包随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多),出现了一个 dex 包装不下的情况,出现65536问题。1.2 为什么方法数不能超过65535在Dalvik指令集里,调用方法的invoke-kind指令中,method reference index只给了16bits,最多能调用6553

chenliguan的博客 3427

android studio应用(三):as gradle 解决方法数超过65535问题

android-support-multidex.jar 一直想好好的记录一下,原来的ADT项目 在遇到65535这个问题之后 转到as这个过程中产生的问题,可是时间一长

haha_321的专栏 3300

Android中方法数超限问题与启动优化详解

前言 最近写了篇有关Eclipse工程转Android Studio工程的文章,而导致公司项目需要转 AS 的直接原因,就是今天要写的主题–方法数超限,相信大多数 Android 项目的都会碰到这个问题。 传统的 Eclipse 解决方法数超限的办法,就是在 project.properties 中加上 dex.force.jumbo=true ,然后清理工程重新编译。但是,当方法数越来越多,这个方法也会解决不了问题,这个时候,就要用到 Google 官方给出的方案 MultiDex 了。 MultiDex 解决方案 一、 如果你的 minSdkVersion >= 21  ,那么只要在模块的

fatal error LNK1189: library limit of 65535 objects exceeded

打开VS工程的属性,找到C/C++,展开找到 Command line, 添加如下选项: /Ob2

swandream的专栏 3335

C/C++面试八股文汇总

以对象管理资源,利用的就是C++构造的对象最终会被对象的析构函数销毁的原则。上述的的申请、使用、释放资源的程序较为简单,但是如果程序很复杂的时候,需要为所有的new 分配的内存delete掉,导致极度臃肿,效率下降,更可怕的是,程序的可理解性和可维护性明显降低了,当操作增多时,处理资源释放的代码就会越来越多,越来越乱。栈在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。

wzzrh的博客 1万+

通过Scrapy爬虫抓取Deep Learning领域的论文数据

然而,大部分高质量的deep learning研究论文都是通过国际顶尖学术会议(如neurips、iclr、icml等)发表的,而这些论文的获取难度较大。在本文中,我们选择抓取arXiv的数据。arXiv是一个管理科学论文的网站,其中包括了许多领域的论文,也包括了Deep Learning领域的论文。同时,arXiv网站还提供了方便的API接口,使得我们的爬虫程序可以很方便地获取论文数据。通过结合其他的数据处理技术,我们可以对这些数据进行更深入的研究和分析,从而推动Deep Learning领域的发展。

Ob2024的博客 609

安卓解决打包超出65535方法

最近一直忙的跟狗一样,终于有一两天时间去研究方法超出的问题了,解决方案有两大种,       第一种:将大工程分成若干个小工程由一个主工程采用反射机制去动态加载,说白点就是在一个Activity上去操作上面的View对象,对象的加载采用反射的机制去加载,由于ZT项目每个模块之间耦合太强了采用这样的方案开发起来还是后面还是会有很多问题,如果像支付宝和携程一样,每个模块功能独立性很强的话采用这个方案

lixingfuGG的博客 1928

每天一个优秀提示词学习收藏 - 文本创作篇(二)

宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本创作 Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧!

2402

[Android] 文件夹下文件的个数限制

Android机子的文件夹下有存放文件的个数限制,做了下测试,如下: 在创建第65534个文件时抛出了异常: java.io.IOException: open failed: ENOSPC (No space left on device) at java.io.File.createNewFile(File.java:940) at lab.sodino.filenumberte

Sodino的专栏 1万+

小白跑WRF第五天,安装WPS和静态地理数据

小白跑WRF第四天,安装WPS一、WPS简介二、下载和安装WPSV4.0第一步、进入Build_WRF文件夹第二步、下载WPSV4.0第三步、解压WPS安装包第四步、修改intmath.f(必须执行)第五步、安装WPS三、修改namelist.wps 一、WPS简介 二、下载和安装WPSV4.0 第一步、进入Build_WRF文件夹 cd Build_WRF 第二步、下载WPSV4.0 下载WPSV4.0的安装包有以下三种方式: 利用Linux命令下载。 进入网站https://www2.mmm.uca

weixin_42372313的博客 2万+

Python全栈入门到实战【基础篇 19】函数进阶:默认参数、递归函数与偏函数应用

本文深入探讨Python函数进阶的三大核心知识:默认参数、递归函数与偏函数。针对默认参数,揭示了可变对象作为默认值的陷阱,提出使用None替代的方案;解析递归函数的三大要素(终止条件、递归调用、问题拆解),并通过阶乘和斐波那契数列示例演示实现方法,同时给出尾递归和缓存装饰器两种优化策略;最后介绍偏函数如何通过functools.partial固化参数简化调用。这些技巧能显著提升函数在复杂场景下的灵活性与复用性,帮助开发者编写更高效的Python代码。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3864

Android 解决Eclipse 方法超过65535问题

现在大部分开发应该都采用Android Studio工具做开发,但是也不乏有些比较苦逼的开发继续采用Eclipse做开发。 最近在和一个合作伙伴做API接口联调的时候,对方告诉我他们的游戏架构比较老旧目前依旧采用Eclipse做Android开发,所以我这边需要提供Eclipse版本的Android资源包。 好吧开始转入Eclipse,发现方法太多报错了,超过65535,这边只好对对jar做合...

chenya866的专栏 398

YOLOv8架构革命:通过EfficientViT融合实现精度-速度的帕累托突破

目标检测领域长期存在精度与速度的权衡难题。视觉Transformer(ViT)的引入解决了长距离依赖问题,但其巨大的计算复杂度制约了实时应用。最新研究表明,将轻量级ViT与YOLO架构融合,可在几乎不损失推理速度的前提下,将mAP提升3-8个百分点。这种架构改进方案已在工业检测、自动驾驶、安防监控等多个领域得到验证,在保持实时性的同时显著提升了复杂场景下的检测可靠性。通过模块化设计,可以灵活适配不同规模的YOLOv8模型,为实际应用提供精度-速度的帕累托最优解。

FJN110的博客 148

android用eclipse开发碰到65535问题的完美解决方案

在sdk的这个路径(adt-bundle-windows-x86_64-20140702\sdk\extras\android\support\multidex\library\libs)下找到android-support-multidex.jar这个文件。我们做完上面的这些工作以后我们打开命令行工具,切换到我们的工程根目录下 cd /d 工程路径,然后输入 gradle build --info,这时就观察控制台的打印日志就行了,如果编译成功会有提示 build success。

2501_90392287的博客 1169

YOLOv11 模型改进:利用新型损失函数实现精度跃升(含代码全解析)

在目标检测领域,损失函数的选择直接决定模型的精度上限。某自动驾驶公司将 YOLOv11 原有损失替换为新型损失后,障碍物检测 mAP 提升 10%,夜间场景误检率降低 22%;某物流分拣项目中,采用新损失的 YOLOv11 模型对小包裹的识别准确率从 82% 升至 96%。如果你也在为模型精度瓶颈、样本不平衡问题困扰,这篇教程将带你掌握 YOLOv11 损失函数的进阶技巧,真正帮你在检测性能上实现突破。损失函数是模型训练的“指南针”,它定义了模型“学习的方向”。传统损失(如 BCE、Focal Loss)在

m0_71589036的博客 714

高通IPA硬件加速介绍

‌ 高通IPA (Internet Protocol Accelerator)模块是一种硬件加速模块,由高通公司(Qualcomm)提供,主要用于优化移动设备上的网络数据传输,特别是通过 LTE 、 5G 等移动网络的数据传输‌‌。IPA模块通过硬件加速,显著提高了数据传输的速度和效率,同时降低了设备的功耗,并提供了更稳定的网络连接,减少了数据传输中的丢包和延迟‌。

四儿家的小祖宗的博客 1624

Android MultiDex 解决 64K 限制,方法数超过65535解决方法

原文章地址:https://blog.youkuaiyun.com/fan7983377/article/details/73850282 参考一下文章: http://www.tuicool.com/articles/aiAf6f http://blog.youkuaiyun.com/zh...

Hunter2916的博客 354

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

关于突破google65k方法的限制,让你的应用不在爆棚

Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple errors, see logs Element uses-permission#android.permission.CHANGE_WIFI_STATE at AndroidManifest.xml:33:5-76 duplicated with element declared at AndroidMa

光英的记忆博客 1128

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如果获取apk的总方法数

如果获取apk的总方法数为何要使用这个: 随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多),相信很多人都遇到过65535的错误 具体如何解决: 这里有解决的开源框架1.下载dex-method-counts.jar,jar链接 2.在cmd命令行写入:java -jar jar_path apk_path

zeng_zhiqian的博客 662

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Eclipese解决65535问题

项目一直受这个问题的困扰,主要还是因为项目属于智能家居这块的,并且还在使用eclipese,所以集成了很多第三方sdk 导致方法数超限。最近致力于解决这个问题。  首先google官方是给出了解决方案的,详细请看连接https://developer.android.google.cn/studio/build/multidex.html  最核心的技术就是:Dalvik 可执行文件分包。我们

付之一笑的专栏 489

安卓项目打包过程中遇到的坑

今天搞了一个问题一整天,真的太气人了这个问题。如下: Error:Execution failed for task ':app:transformClassesWithDexForRelease'. &gt; com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessE...

lwzy1314的博客 769

[Android] Android统计Apk , jar包方法数

reference to : http://www.jianshu.com/p/61e8f803e0d1 Android在开发过程中,随着引用的库以及业务的增多,不可避免的会出现64K limit问题,也就是方法数过多的问题,Java代码中的Method总数和Field总数都不能超过65535个,那统计一下每一个jar包中包含多少个Method还是很有必要的,目前Google已经为我们实现...

weixin_34184561的博客 82

关于android studio工程APP编译时找不到系统framework的方法或变量问题

android系统应用开发过程中,难免会修改增加系统框架的一些方法或者参数,生成系统framework.jar供android工程依赖使用,在android studio的module目录下的build.gradle配置jar包依赖,注意的是不能用implementation,否则编译时会报方法数超过65535的问题。 compileOnly(‘extra_libs/framework.jar’) build报错如下: Task MyApplication compileDebugJavawithJa

分享技术与经验的博客 1689

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

一、找坑:谷歌规定单个dex文件中的方法不能超过65536的限制 我们编写项目过程中在工程的lib文件夹下引用的第三方插件jar包太多或者项目过大,编译运行时就有可能报出com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536错误。看到这个错误说明你的方法加起来已经超过了65536这个数目。但

阿方的博客 5084

Android出现65535的原因

深度剖析65535问题的产生原因

brycegao321的博客 7299

如何解决Dex方法数问题(解决单个dex里面的方法数不能超过65535个的问题)

问题背景 在Android中,所有的Java/Kotlin文件编译后,会放到一个后缀为dex的文件,但Google有一个规范是,单个dex里面的方法数不能超过65535个,但真实项目中,特别是我们这个项目,后面会集成很多的依赖,所以肯定会超过这个数量,如果不解决,后面就会报错,对于这个问题,Google官方提供了解决方法,一般情况下这个问题,都会在创建完项目后,配置完成,但因为要写到Application中,所以我们这里才实现,因为正好前面添加了AppContext。 如何解决 集成官方提供的MultiDe

追梦人的博客 983
王露昊
博客等级 码龄10年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值