使用jadx反编译528MB大JAR时遇Zip条目数超限问题求助
jadx反编译大Jar文件失败的解决方法
问题背景
尝试反编译一个528MB的large.jar文件时,使用jadx工具出现失败,核心报错为:
Zip entries count limit exceeded: 100000:Jar内文件条目数超过jadx默认限制Unknown constant pool tag: 0:尝试解析非class文件(如native库)时出错
完整执行命令及报错信息:
$ du -sch build/* 528M large.jar 528M total $ jadx -d decompiled large.jar INFO - loading ... ERROR - Failed to process zip file: large.jar java.lang.RuntimeException: Failed to process zip file: large.jar at jadx.api.plugins.utils.ZipSecurity.visitZipEntries(ZipSecurity.java:115) ... Caused by: java.lang.IllegalStateException: Zip entries count limit exceeded: 100000, last entry: com/amazonaws/services/identitymanagement/model/UploadSigningCertificateResult.class ... ERROR - Failed to load class data for file: large.jar:META-INF/native/osx/libjansi.jnilib jadx.plugins.input.java.utils.JavaClassParseException: Unknown constant pool tag: 0 ... ERROR - Process error: java.lang.RuntimeException: Failed to process zip file: large.jar ... Caused by: java.lang.IllegalStateException: Zip entries count limit exceeded: 100000, last entry: com/amazonaws/services/identitymanagement/model/UploadSigningCertificateResult.class ...
解决方法
1. 调整jadx的Zip条目限制
jadx默认限制Jar内最多处理100000个条目,可通过JVM参数扩大该限制:
jadx -Djadx.zip.entries.limit=200000 -d decompiled large.jar
数值可根据实际Jar条目数调整(比如用unzip -l large.jar | wc -l查看总条目数)。如果使用jadx GUI,可在启动时添加该JVM参数,或修改jadx配置文件(如config.yml中的zip.entries.limit字段)。
2. 修剪Jar文件,移除非必要内容
解压Jar后删除不需要的文件(如native库、冗余资源、重复依赖),重新打包后再反编译:
# 解压Jar unzip large.jar -d temp_dir # 删除native库等非class文件 rm -rf temp_dir/META-INF/native # 重新打包成精简版Jar jar cf trimmed.jar -C temp_dir . # 反编译精简版Jar jadx -d decompiled trimmed.jar
3. 提取特定模块单独反编译
如果只需要Jar中部分代码,可提取指定包路径下的文件单独打包反编译:
# 提取AWS相关类文件 unzip large.jar com/amazonaws/** -d aws_module # 打包成单独Jar jar cf aws_only.jar -C aws_module . # 反编译该模块 jadx -d decompiled_aws aws_only.jar
4. 更换反编译工具
若jadx仍无法处理,可尝试其他工具:
- JD-GUI:可视化工具,支持大Jar文件加载
- Fernflower:IntelliJ IDEA内置的反编译器,命令行使用示例:
java -jar fernflower.jar large.jar decompiled_dir - Procyon:针对Java 8+优化的反编译器,命令行使用示例:
java -jar procyon-decompiler.jar -o decompiled_dir large.jar
内容的提问来源于stack exchange,提问作者Geoff Langenderfer
相关产品推荐
相关产品推荐

