Mobclix和Proguard [英] Mobclix and Proguard
问题描述
我正在尝试使用Proguard混淆我的代码。我使用Mobclix做广告,当我构建APK时,它会吐出一个错误:
I'm trying to use Proguard to obfuscate my code. I use Mobclix for advertisements, and when I build my APK it's spitting out an error:
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中:
Now, I have put the Mobclix recommended bits from their documentation into my 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>;
}
我还要做什么?谢谢一百万
Anything else I should be doing? Thanks a million
推荐答案
消息说明某些Mobclix类(例如 com.mobclix.android.sdk .MobclixContactsCursorEntityIterator
)取决于您的输入jar或库jar中不存在的Android运行时类(例如 android.content.Entity
)。通常,这可能是严重问题的征兆:如果代码的这一部分曾经执行过,它将失败并出现NoClassDefFoundError(即使没有混淆)。
The messages explain that some Mobclix classes (like com.mobclix.android.sdk.MobclixContactsCursorEntityIterator
) depend on Android runtime classes (like android.content.Entity
) that are not present in your input jars or library jars. In general, that could be a sign of serious problems: if that part of the code is ever executed, it will fail with NoClassDefFoundError (even without obfuscation).
就像在Android SDK 7中引入了Entity类一样,因此我假设您是针对较旧的SDK构建的。再次假设尽管缺少此类,您的代码仍然可以正常运行,您可以让ProGuard接受带有
It looks like the Entity class has been introduced in Android SDK 7, so I presume that you are building against an older SDK. Again assuming that your code runs fine in spite of this missing class, you can let ProGuard accept the somewhat inconsistent input with
-dontwarn android.content.Entity*
请注意-keep选项在这里不起作用。 ProGuard在考虑任何-keep选项之前执行一致性检查。
Note that -keep options don't come into play here. ProGuard performs the consistency checks before considering any -keep options.
另请参见 ProGuard手册>故障排除>警告:找不到引用的类
Also see ProGuard manual > Troubleshooting > Warning: can't find referenced class
这篇关于Mobclix和Proguard的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!