Android项目:proguard混淆之常见问题及解决方法汇总

简介:

1.使用proguardgui混淆器对jar包进行混淆,出现EXCEPTION FROM SIMULATION错误

[2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx 
EXCEPTION FROM SIMULATION:
[2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx local variable type mismatch: attempt to set or access a value of type java.lang.Object using a local variable of type int. This is symptomatic of .class transformation tools that ignore local variable information.
 
[2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx ...at bytecode offset 0000012f
locals[0000]: Lcom/android/volley/toolbox/BasicNetwork;
locals[0001]: Lcom/android/volley/Request;
locals[0002]: J
locals[0003]: <invalid>
locals[0004]: Lorg/apache/http/HttpResponse;
locals[0005]: [B
locals[0006]: Ljava/util/Map;
locals[0007]: Ljava/io/IOException;
locals[0008]: <invalid>
locals[0009]: <invalid>
locals[000a]: <invalid>
stack[0001]: N012bLcom/android/volley/NoConnectionError;
stack[top0]: N012bLcom/android/volley/NoConnectionError;
...while working on block 012e
...while working on method performRequest:(Lcom/android/volley/Request;)Lcom/android/volley/NetworkResponse;
...while processing performRequest (Lcom/android/volley/Request;)Lcom/android/volley/NetworkResponse;
...while processing com/android/volley/toolbox/BasicNetwork.class
 
[2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx 1 error; aborting
[2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Conversion to Dalvik format failed with error 1


解决方法:在配置文件中去掉-keepattributes LocalVariable*Table这个配置项。

参考资料:Android项目:自构框架、SDK包或者jar文件库的混淆及常见问题解决方法


2.引用库正常,对库的代码打成jar包混淆后运行报错Unable to execute dex: Multiple dex files define:

Unable to execute dex: Multiple dex files define Lcom/glblong/socshare/R$anim


解决方法:项目引用了不同版本的jar包导致的,如果libs中的jar包版本都是一致的,那么问题可能出现在使用proguradgui时引入的jar包版本不一致导致的。也就是在混淆过程中,引入的jar包要与项目中使用的jar文件一致。

参考资料:Android项目:自构框架、SDK包或者jar文件库的混淆及常见问题解决方法



3.在你依赖的外部jar包已经混淆的情况下再进行混淆打包有可能出现以下情况:

 Can't read [***\***.jar] (Can't process class [**/a/f.class] (Unknown verification type [108] in stack map frame))

[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] Proguard returned with error code 1. See console
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] java.io.IOException: Can't read [F:\work_hb_v02_pbulish\Lib_SocShare_v237_0703\libs\untiy-classes.jar] (Can't process class [com/unity3d/player/UnityPlayer.class] (Unknown verification type [251] in stack map frame))
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.InputReader.readInput(InputReader.java:232)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.InputReader.readInput(InputReader.java:202)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.InputReader.readInput(InputReader.java:180)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.InputReader.execute(InputReader.java:78)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.ProGuard.readInput(ProGuard.java:196)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.ProGuard.execute(ProGuard.java:78)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.ProGuard.main(ProGuard.java:483)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] Caused by: java.io.IOException: Can't process class [com/unity3d/player/UnityPlayer.class] (Unknown verification type [251] in stack map frame)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.ClassReader.read(ClassReader.java:112)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.JarReader.read(JarReader.java:65)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.InputReader.readInput(InputReader.java:228)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] ... 6 more
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] Caused by: java.lang.RuntimeException: Unknown verification type [251] in stack map frame
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.io.ProgramClassReader.createVerificationType(ProgramClassReader.java:890)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.io.ProgramClassReader.visitFullFrame(ProgramClassReader.java:659)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.io.ProgramClassReader.visitStackMapTableAttribute(ProgramClassReader.java:452)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.io.ProgramClassReader.visitCodeAttribute(ProgramClassReader.java:422)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:200)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] at proguard.io.ClassReader.read(ClassReader.java:91)
[2014-07-17 10:51:15 - Test025_HouseBox_v02_test10] ... 12 more


解决方法:找到proguard源码中proguard\src\proguard\classfile\ClassConstants.java类,然后修改ATTR_StackMapTable的值,将原来的的StackMapTable改为dummy.

    public static final String ATTR_StackMapTable = "dummy";//"StackMapTable";


然后重新ant打包proguard,使用新的proguard来混淆就不会出现上面的问题。

ant打包proguard方法见:Android项目:通过ant重新打包proguard混淆器jar文件


参考资料:

1.Proguard returned with error code 1. (Proguard errors with untiy-classes.jar)

2.ProGuard Java Optimizer and Obfuscator

3.Android项目:通过ant重新打包proguard混淆器jar文件







本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1435941,如需转载请自行联系原作者

目录
相关文章
|
3天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
移动开发 监控 安全
mPaaS常见问题之Android集成dexPatch热修复运行时候无法正常进行热更新如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
34 0
|
3月前
|
算法 Java Android开发
Android安全性: 什么是ProGuard,它的作用是什么?
Android安全性: 什么是ProGuard,它的作用是什么?
50 1
|
1天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
2 0
|
1月前
|
移动开发 小程序 Android开发
mPaaS常见问题之pixel4 android 13 调用移动网关 报这个错如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
32 0
|
1月前
|
移动开发 监控 小程序
mPaaS 常见问题之Android 14uc内核不生效如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
17 0
|
1月前
|
运维 监控 Java
应用研发平台EMAS产品常见问题之安卓构建版本失败如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
1月前
|
运维 监控 Android开发
应用研发平台EMAS常见问题之安卓push的离线转通知目前无法收到如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
25 1
|
2月前
|
Java Android开发 C++
安卓SO层开发 -- 第一个NDK项目
安卓SO层开发 -- 第一个NDK项目
16 0
|
3月前
|
IDE 开发工具 Android开发
Android Studio 下发布项目成APK文件
Android Studio 下发布项目成APK文件
117 1