Mobclix и Proguard - PullRequest
       26

Mobclix и Proguard

0 голосов
/ 10 августа 2011

Я пытаюсь использовать Proguard, чтобы запутать мой код. Я использую Mobclix для рекламы, и когда я создаю свой APK, он выдает ошибку:

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>;
}

Что-нибудь еще, что я должен делать? Спасибо миллион

Ответы [ 2 ]

0 голосов
/ 15 августа 2011

В сообщениях объясняется, что некоторые классы Mobclix (например, com.mobclix.android.sdk.MobclixContactsCursorEntityIterator) зависят от классов среды выполнения Android (например, android.content.Entity), которых нет в ваших входных банках или библиотеках.В общем, это может быть признаком серьезных проблем: если эта часть кода когда-либо будет выполнена, она завершится с ошибкой NoClassDefFoundError (даже без обфускации).

Похоже, класс Entity был введен в AndroidSDK 7, поэтому я предполагаю, что вы строите против старого SDK.Опять же, предполагая, что ваш код работает нормально, несмотря на этот отсутствующий класс, вы можете позволить ProGuard принять несколько непоследовательный ввод с

-dontwarn android.content.Entity*

Обратите внимание, что параметры -keep здесь не вступают в игру.ProGuard выполняет проверки согласованности перед рассмотрением любых параметров -keep.

Также см. Руководство по ProGuard > Устранение неполадок> Предупреждение: не удается найти ссылочный класс

0 голосов
/ 10 августа 2011

Возможно изменить

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

на

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