运行带有AQuery库的ProGuard

时间:2014-02-13 17:10:56

标签: android obfuscation proguard aquery

我正在尝试配置Proguard,但我无法让它运行起来。

这是错误: enter image description here

我尝试过这样的事情:

-keep class com.android.auth.TwitterHandle.** { *; }
-keep class oauth.** { *; }

没有运气。

无论如何,我并不认为无视是答案。因为那可能意味着某些东西被打破了。

任何提示?

谢谢!

5 个答案:

答案 0 :(得分:8)

警告表明AndroidQuery库依赖于OAuth库。显然,您在项目中使用的是前一个库,但缺少后一个库。您可以添加缺少的库,但如果您的应用程序在调试模式下没有它正常工作,您可以告诉ProGuard忽略缺少的依赖项。在这种情况下:

-dontwarn com.androidquery.auth.**

或者,效果相同:

-dontwarn oauth.signpost.**

请参阅ProGuard手册>疑难解答> Warning: can't find referenced class

(我是ProGuard的开发者)

答案 1 :(得分:3)

将这些行添加到proguard文件中。

-dontwarn oauth.**
-dontwarn com.android.auth.TwitterHandle.**

-keep class oauth.** { *; }
-keep class com.android.auth.TwitterHandle.** { *; }

修改:

  

无论如何,我并不认为无视是答案。因为那个   可能意味着某些事情已经破裂。

如果您想使用Proguard并且遇到一些错误,例如找不到类,那么您必须禁用/忽略它们的混淆。因为Proguard在混淆时重命名类的名称,字段和方法。如果对该类使用反射,这将成为一个大问题。所以你必须说proguard忽略(不混淆)一些类来防止这个问题。

答案 2 :(得分:1)

请试试这篇文章https://stackoverflow.com/a/15477898/1665964

使用此示例插入以跳过在ProGuard中对您的库,jar,类和子类进行模糊处理

-optimizationpasses 5
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-allowaccessmodification
-repackageclasses ''

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

-libraryjars  libs/commons-io-2.2.jar
-libraryjars  libs/gson-2.2.2.jar
-keep public class org.apache.commons.io.**
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}

##---------------Begin: proguard configuration for Gson ----------
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mypackage.ActivityMonitor.ClassMultiPoints.** { *; }
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints     { public protected *; }
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints { public protected *; }
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints$ClassPoint { public protected *; }
##---------------End: proguard configuration for Gson ----------

答案 3 :(得分:1)

出错的原因必须是您可能正在使用外部jar文件(在libs文件夹中)。

如果是这种情况,在-keep class ...行之前添加以下行应该可以解决您的问题。

-libraryjars libs/<jar_filename>

答案 4 :(得分:1)

如果您不熟悉proguard cmd工具,那么您可以尝试位于Android SDK文件夹tools/proguard/lib/proguardgui的proguard gui。

打开proguardgui并加载配置文件。

然后在输入/输出部分添加您的输入和输出jar以及添加您的项目中使用的android lib。 add your libs *****你的主要问题是你没有添加你的项目中使用的库(Aquery.jar和其他)jar,因此proguard找不到所需的类。***