2014-02-13 45 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無法找到所需的類。***