2014-02-13 50 views
5

我正在尝试配置Proguard,但我无法设法让它工作。运行带有AQuery库的ProGuard

这是错误: enter image description here

我已经试过了诸如:

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

没有任何的运气。

无论如何,我真的不认为忽略就是答案。因为这可能意味着某些事情被打破了

任何提示?

谢谢!

回答

8

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

-dontwarn com.androidquery.auth.** 

,或者以同样的效果:

-dontwarn oauth.signpost.** 

参见ProGuard的手册>故障排除>Warning: can't find referenced class

(我的ProGuard的显影剂)

1

请试试这个职位https://stackoverflow.com/a/15477898/1665964

插入到的ProGuard跳过混淆你的库,罐,类和子类这个例子

-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 ---------- 
1

原因的错误必须是你可能会使用外部jar文件(在libs文件夹中)。

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

-libraryjars libs/<jar_filename>

3

这些行添加到您的ProGuard文件。

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

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

编辑:

Anyways, I don't really think ignoring is the answer. Because that might mean something is broken.

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

1

如果你不熟悉proguard cmd工具,那么你可以试试你的android SDK文件夹中的tools/proguard/lib/proguardgui的proguard gui。

打开proguardgui并加载您的配置文件。

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