解决使用dx工具将class格式的jar包转成dex格式的二进制jar包时可能遇到的问题

前言

 由于实验室的某个项目需要,得将soot.jar转为dex格式的二进制jar包,但是在这过程中遇到了一些问题,这篇博客就是用来记录在将较大的jar包转成dex格式的jar包过程中可能遇到的问题以及对应的解决办法。

 问题 & 解决

问题1:OutOfMemoryError错误

 

在这里,产生java.lang.OutOfMemoryError这个错误的原因是因为分配给dx工具的JVM内存过小,可以通过增加jvm的heap内存大小来解决。

具体解决办法:

修改dx.bat文件,将原来的1G的heap内存改成更大的值,本文的做法是将其改成4G。

问题2: Uncaught translation error: com.android.dx.cf.code.SimException: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)

 

需要设置支持的最小sdk版本

具体解决办法:

 使用dx工具时通过--min –sdk –version参数来指定支持的最小sdk版本

问题3:dex中的方法数超过65536

Dalvik Executable 规范将可在单个 DEX 文件内可引用的方法总数限制在 65,536,其中包括 Android 框架方法、内容库方法以及自己代码中的方法。在计算机科学领域内,术语千(简称 K)表示 1024(或 2^10)。由于 65,536 等于 64 X 1024,因此这一限制也称为“64K 引用限制”。

具体解决办法:

解决这个问题的关键是生成多个dex文件,可以通过dx工具中的 --multi-dex指令来实现。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值