Eclipse proguardコード混同微信サードパーティライブラリCan't process class(Unknown verification type[95]in stack map frame)

4797 ワード

今日、androidのEclipseプロジェクトをコンパイルします.コード混同を開かないとapkパッケージを正常にエクスポートできます.コード混同を開いた後、エラーを報告します.
[2016-12-26 23:45:51 - test] Proguard returned with error code 1. See console
[2016-12-26 23:45:51 - test] java.io.IOException: Can't read [D:\xxx\test\code\android\libs\libammsdk.jar] (Can't process class [com/tencent/wxop/stat/al.class] (Unknown verification type [95] in stack map frame))
[2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:230)
[2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:200)
[2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:178)
[2016-12-26 23:45:51 - test] at proguard.InputReader.execute(InputReader.java:78)
[2016-12-26 23:45:51 - test] at proguard.ProGuard.readInput(ProGuard.java:196)
[2016-12-26 23:45:51 - test] at proguard.ProGuard.execute(ProGuard.java:78)
[2016-12-26 23:45:51 - test] at proguard.ProGuard.main(ProGuard.java:492)
[2016-12-26 23:45:51 - test] Caused by: java.io.IOException: Can't process class [com/tencent/wxop/stat/al.class] (Unknown verification type [95] in stack map frame)
[2016-12-26 23:45:51 - test] at proguard.io.ClassReader.read(ClassReader.java:112)
[2016-12-26 23:45:51 - test] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2016-12-26 23:45:51 - test] at proguard.io.JarReader.read(JarReader.java:65)
[2016-12-26 23:45:51 - test] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[2016-12-26 23:45:51 - test] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:226)
[2016-12-26 23:45:51 - test] ... 6 more
[2016-12-26 23:45:51 - test] Caused by: java.lang.RuntimeException: Unknown verification type [95] in stack map frame
[2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.createVerificationType(ProgramClassReader.java:890)
[2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitFullFrame(ProgramClassReader.java:659)
[2016-12-26 23:45:51 - test] at proguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114)
[2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitStackMapTableAttribute(ProgramClassReader.java:452)
[2016-12-26 23:45:51 - test] at proguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71)
[2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitCodeAttribute(ProgramClassReader.java:422)
[2016-12-26 23:45:51 - test] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
[2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:200)
[2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142)
[2016-12-26 23:45:51 - test] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[2016-12-26 23:45:51 - test] at proguard.io.ClassReader.read(ClassReader.java:91)
[2016-12-26 23:45:51 - test] ... 11 more
ネットで長い間調べていましたproguard-project.txtなどのファイルは正しく構成されています.
-libraryjars libs/libammsdk.jar
.....
-dontwarn com.tencent.**
-keep class com.tencent.** {*;}
実は私はプロジェクトが絶対に大丈夫だと確信することができます.このプロジェクトはずっと前のもので、当時バージョンがコードが混同されていて、何の問題もなく、その後、プロジェクトはまったく変更されませんでした.私は最近、コンピュータの再インストールシステム、Eclipse開発環境とsdkディレクトリが再構築されているので、開発環境の問題に違いありません.
ネットで資料を調べて、proguardバージョンの問題だと判断できたので、proguard 5をダウンロードしました.3,5.3のlibフォルダのproguard.jarなど3つのjarファイルを置き換えます
sdk\tools\proguard\lib
次の3つのjarファイルの結果、別のエラーが発生しました.
The same input jar is specified twice
そしてhttp://blog.csdn.net/ylbf_dev/article/details/50448727の説明はproguard-project.txtの
-libraryjarsは順番に注釈して、この新しい問題は解決しましたが、前の問題がまた現れて、やはり通じないようです.
その後、古いバージョンproguard 4もダウンロードしたことがある.11 libフォルダの3つのjarファイルを置き換え、問題は依然として存在します!
その後、この投稿を見つけました.http://bbs.csdn.net/topics/390659813?page=1ああ、そう言いました.
この問題は一般的にjarパケットの内部で比較的高度な解読防止や問題によるものであり、第三者のjarパケットを参照するproguardの検査を弱める必要があります.もちろん、proguardが新しくない可能性もあります.以下は弱体化検査の方法です.
まず最新バージョンのproguardファイルをダウンロードし、~/src/proguard/classfileのClassConstantsを見つけます.JAva,修正174行付近のATTR_StackMapTable値は「dummy」で保存されます.
linux環境で実行~/buildでのbuild.shファイル(macで実行可能)、libで3つのjarパケットproguardを再生成する.jar,proguardgui.jar,retrace.JAr、この3つのパッケージをあなたのアンドロイドsdkの下、toolsのproguardのlibの下、~//sdk/tools/proguard/libに置き換えます
CSDNで熱心なネットユーザーがアップロードしたproguard 4に基づいてダウンロードした.11の修正コンパイル後のバージョンは、sdktoolsproguardlibディレクトリの下のproguardに置き換えられます.JArなど3つのファイルを待って、やっとexportコードの混同バージョンに成功しました!