2011-08-09 51 views
0

我正在嘗試使用Proguard來混淆我的代碼。我使用Mobclix的對廣告,當我建立我的APK它吐出一個錯誤:Mobclix和Proguard

org.eclipse.core.runtime.CoreException: Proguard returned with error code 1. See console 
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:228) 
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:290) 
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:229) 
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:214) 
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) 
Caused by: Proguard Error 1 
Output: 
Warning: com.mobclix.android.sdk.MobclixContactsCursorEntityIterator: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsCursorEntityIterator: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsEntityIterator: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity$NamedContentValues 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity$NamedContentValues 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity$NamedContentValues 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
     You should check if you need to specify additional program jars. 
Warning: there were 17 unresolved references to classes or interfaces. 
     You may need to specify additional library jars (using '-libraryjars'), 
     or perhaps the '-dontskipnonpubliclibraryclasses' option. 
java.io.IOException: Please correct the above warnings first. 
    at proguard.Initializer.execute(Initializer.java:308) 
    at proguard.ProGuard.initialize(ProGuard.java:210) 
    at proguard.ProGuard.execute(ProGuard.java:85) 
    at proguard.ProGuard.main(ProGuard.java:499) 
    at com.android.ide.eclipse.adt.internal.build.BuildHelper.runProguard(BuildHelper.java:527) 
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:187) 
    ... 4 more 

現在,我已經把Mobclix的建議,從他們的文檔位進入我proguard.cfg:

-keep public class com.mobclix.android.sdk.* 
-keep class com.mobclix.android.sdk.MobclixJavascriptInterface 

-keepclassmembers class com.mobclix.android.sdk.MobclixJavascriptInterface 
{ 
    public void *(...); 
    <methods>; 
} 

-keepclassmembernames class 
com.mobclix.android.sdk.MobclixJavascriptInterface { 
    public void *(...); 
    <methods>; 
} 

還有什麼我應該做的?萬分感謝

回答

0

的消息解釋說,一些Mobclix的類(比如com.mobclix.android.sdk.MobclixContactsCursorEntityIterator)取決於Android的運行時類(如android.content.Entity)中不存在在你的輸入罐子或圖書館罐子。一般來說,這可能是一個嚴重問題的標誌:如果這部分代碼執行完畢,它會因NoClassDefFoundError(即使沒有模糊處理)而失敗。

看起來Entity類已經在Android SDK 7中引入了,所以我推測您正在構​​建一個較老的SDK。再假設你的代碼運行儘管有這種缺失類的精細,可以讓ProGuard的接受輸入多少有些不符合

-dontwarn android.content.Entity* 

注意-keep選項不來這裏發揮作用。在考慮任何-keep選項之前,ProGuard會執行一致性檢查。

另見ProGuard manual>故障排除>警告:找不到引用的類

+0

優秀的答案。我確實是針對SDK 4構建的,但是以7爲目標。它對15個版本一直沒有任何問題,但是如果我碰到NoClassDefFoundError,我想我會知道該看什麼。非常感謝你的幫助! – Nick

0

也許改變

-keep public class com.mobclix.android.sdk.* 

-keep public class com.mobclix.android.sdk.** 
+0

沒有骰子,謝謝雖然 – Nick

+0

也許加上'-keep公共類android.content.Entity',永不刪除默認的東西,在'在一個新的eclipse項目中生成proguard.cfg',所以如果你刪除了它,那麼創建一個新項目並複製'proguard.cfg'代碼 – pqn

+0

同樣的錯誤,不,我沒有刪除默認的東西。 – Nick