混淆工具Proguard出现“警告:org.msgpack.*”

3
使用Eclipse导出我的项目时,我收到了以下警告:
[2013-08-20 10:45:24 - MyProj] Proguard returned with error code 1. See console
[2013-08-20 10:45:24 - MyProj] Note: there were 3023 duplicate class definitions.
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CtNewConstructor
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CannotCompileException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.NotFoundException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CtNewConstructor
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BeansBuildContext: can't find referenced class javassist.CtConstructor
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtNewMethod
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CannotCompileException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.NotFoundException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtNewMethod
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtMethod
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.BuildContext: can't find referenced class javassist.CtMethod
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CtNewConstructor
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CannotCompileException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.NotFoundException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CtNewConstructor
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.DefaultBuildContext: can't find referenced class javassist.CtConstructor
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.LoaderClassPath
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.LoaderClassPath
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.NotFoundException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.ClassPool
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.template.builder.JavassistTemplateBuilder: can't find referenced class javassist.CtClass
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.ToolProvider
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.DiagnosticCollector
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.DiagnosticCollector
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaCompiler
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.StandardLocation
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileManager
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileObject
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileObject
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileObject$Kind
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaCompiler
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileManager
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.ToolProvider
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaCompiler
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.StandardLocation
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileManager
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileManager$Location
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileObject
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaCompiler
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileManager
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler: can't find referenced class javax.tools.JavaFileObject$Kind
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler$1: can't find referenced class javax.tools.JavaFileObject$Kind
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler$1: can't find referenced class javax.tools.JavaFileObject$Kind
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler$1: can't find referenced class javax.tools.JavaFileObject
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.TemplatePrecompiler$1: can't find referenced class javax.tools.JavaFileObject$Kind
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.JSONParser
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.JSONParser
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.JSONParser
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.ParseException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.ParseException
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.JSONParser
[2013-08-20 10:45:24 - MyProj] Warning: org.msgpack.util.json.JSONUnpacker: can't find referenced class org.json.simple.parser.ParseException
[2013-08-20 10:45:24 - MyProj]       You should check if you need to specify additional program jars.
[2013-08-20 10:45:24 - MyProj] Warning: there were 81 unresolved references to classes or interfaces.
[2013-08-20 10:45:24 - MyProj]          You may need to specify additional library jars (using '-libraryjars').
[2013-08-20 10:45:24 - MyProj] java.io.IOException: Please correct the above warnings first.
[2013-08-20 10:45:24 - MyProj]  at proguard.Initializer.execute(Initializer.java:321)
[2013-08-20 10:45:24 - MyProj]  at proguard.ProGuard.initialize(ProGuard.java:211)
[2013-08-20 10:45:24 - MyProj]  at proguard.ProGuard.execute(ProGuard.java:86)
[2013-08-20 10:45:24 - MyProj]  at proguard.ProGuard.main(ProGuard.java:492)

project.properties:

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-myproject.txt

# Project target.
target=Google Inc.:Google APIs:17
android.library.reference.1=../../../android/downloaded/JakeWharton-ActionBarSherlock-e5c2d1c/library
android.library.reference.2=../../../android/android-sdk-macosx/extras/google/google_play_services/libproject/google-play-services_lib

proguard-myproject.txt:

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:
-injars      bin/classes
-injars      libs
-outjars     bin/classes-processed.jar
-libraryjars /Users/tester/Documents/workspace/android_testing/MyProj/libs/MixpanelAPI.jar
-libraryjars /Users/tester/Documents/workspace/android_testing/MyProj/libs/Parse-1.3.2.jar      
-libraryjars /Users/tester/Documents/workspace/android_testing/MyProj/libs/TestFlightLib.jar
-libraryjars /Users/tester/Documents/workspace/android_testing/MyProj/libs/android-support-v13.jar
-libraryjars /Users/tester/Documents/android/android-sdk-macosx/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.content.Context {
   public void *(android.view.View);
   public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.parse.** { *; }
-keep class com.mixpanel.** { *; }
-keep class com.testflightapp.** { *; }
-keep class org.json.simple.** { *; }

-dontwarn com.facebook.**
-dontwarn android.support.**

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

我正在使用一些第三方工具,包括mixpanel.com、parse.com、ActionBarSherlock(http://actionbarsherlock.com/)和TestFlightApp.com

我尝试将以下内容添加到我的proguard-myproject.txt文件中:

-dontwarn javassist.**
-dontwarn javax.tools.**
-dontwarn json.simple.parser.**

然而,如果我将它们放在我的应用中,启动应用后立即崩溃,所以我猜想我需要通过正确包含库来清理警告。

问题:

我想知道我需要在我的proguard-myproject.txt文件中包含什么内容才能消除这些警告并能够在我的手机上启动应用程序,而不会在启动应用程序后立即崩溃。如果我只是从eclipse中运行应用程序,使用普通的Run..或Debug选项,应用程序可以正常工作,因此我猜想Proguard可能会删除我需要的某些类。

如果有人需要查看dump.txt、mapping.txt、seeds.txt和usage.txt,我也有这些文件,但它们相当长,所以我认为现在不需要粘贴在这里。

已解决!

感谢@Eric Lafortune和proguard文档的帮助。

主要问题就是添加以下内容:

-keep class com.myapp.** { *; }
-keep interface com.myapp.** { *; }

com.myapp.** 是我的应用程序的包

proguard-myproject.txt:

-injars      bin/classes
-injars      libs
-outjars     bin/classes-processed.jar
-libraryjars libs/MixpanelAPI.jar
-libraryjars libs/Parse-1.3.2.jar       
-libraryjars libs/TestFlightLib.jar
-libraryjars libs/android-support-v13.jar
-libraryjars libs/KiipSDK.jar
-libraryjars /Users/tester/Documents/android/android-sdk-macosx/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.content.Context {
   public void *(android.view.View);
   public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
#-keep class android.support.v4.app.** { *; }
#-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.parse.** { *; }
-keep class com.mixpanel.** { *; }
-keep class com.testflightapp.** { *; }
-keep class org.json.simple.** { *; }
-keep class com.myapp.** { *; }
-keep interface com.myapp.** { *; }

-dontwarn com.facebook.**
-dontwarn android.support.**
-dontwarn org.msgpack.**

具体而言: 您所描述的问题已经在链接问题的回答中得到了解决。 - mikołak
@TheTerribleSwiftTomato,不知道该如何回复你,只能在评论中留言。无论如何,感谢你提供的信息!希望我能有时间进一步研究这个问题。 - nommer
1个回答

8

Android SDK中的Ant/Eclipse/Gradle构建过程会自动为您指定输入jar、库jar和输出jar,因此您不必在配置中再次指定它们。这就是为什么您会收到许多关于重复类的警告。

另一方面,一些org.msgpack类依赖于不在您的libs目录中的类。如果您的调试构建正常工作,则可以使用以下命令告诉ProGuard忽略它:

-dontwarn org.msgpack.**

如果你的应用程序崩溃了,你应该查看logcat输出。你可以在ProGuard手册的Troubleshooting部分中找到建议。


谢谢!看起来除了我编辑的部分之外,这个问题已经解决了! - nommer
以管理员身份运行SDK和Eclipse,并将以下代码添加到您的清单文件中:<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> - Chris Sim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接