前言
由于实验室的某个项目需要,得将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指令来实现。