2011-08-09 54 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