я получаю сообщение об ошибке при экспорте моего Android-приложения из Eclipse, использующего android-support-v4.jar с Proguard - PullRequest
0 голосов
/ 03 ноября 2011

Может ли кто-нибудь мне помочь с тем, что я использую ProGuard в моем приложении Android, я получаю следующую ошибку, пока я подписан на экспорт.

Вот что показывает моя консоль.

[2011-11-03 16:07:52 - AndroidViewPager] Proguard returned with error code 1. See console
[2011-11-03 16:07:52 - AndroidViewPager] Note: there were 95 duplicate class definitions.
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.app.ActivityCompatHoneycomb: can't find referenced method 'void invalidateOptionsMenu()' in class android.app.Activity
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.app.ActivityCompatHoneycomb: can't find referenced method 'void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])' in class android.app.Activity
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.view.MenuCompatHoneycomb: can't find referenced method 'void setShowAsAction(int)' in class android.view.MenuItem
[2011-11-03 16:07:52 - AndroidViewPager] Warning: there were 3 unresolved references to classes or interfaces.
[2011-11-03 16:07:52 - AndroidViewPager]          You may need to specify additional library jars (using '-libraryjars'),
[2011-11-03 16:07:52 - AndroidViewPager]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-11-03 16:07:52 - AndroidViewPager] Warning: there were 3 unresolved references to program class members.
[2011-11-03 16:07:52 - AndroidViewPager]          Your input classes appear to be inconsistent.
[2011-11-03 16:07:52 - AndroidViewPager]          You may need to recompile them and try again.
[2011-11-03 16:07:52 - AndroidViewPager]          Alternatively, you may have to specify the options 
[2011-11-03 16:07:52 - AndroidViewPager]          '-dontskipnonpubliclibraryclasses' and/or
[2011-11-03 16:07:52 - AndroidViewPager]          '-dontskipnonpubliclibraryclassmembers'.
[2011-11-03 16:07:52 - AndroidViewPager] java.io.IOException: Please correct the above warnings first.
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.Initializer.execute(Initializer.java:308) 
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.ProGuard.initialize(ProGuard.java:210)
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.ProGuard.execute(ProGuard.java:85)
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.ProGuard.main(ProGuard.java:499)

Я думаю, что в банке может быть что-то не так. Как указать дополнительные библиотеки JAR я использую следующий файл Proguard.cfg

  optimizationpasses 5

 -dontpreverify
 -verbose

  -libraryjars 'E:\Himanshu\AndroidViewPager\libs\android-support-v4.jar'
  -dontskipnonpubliclibraryclasses
  -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
 -keep public class * extends android.preference.Preference
 -keep public class com.android.vending.licensing.ILicensingService

 -keepclasseswithmembernames class * {
    native <methods>;
}

 -keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

  -keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

  -keepclassmembers enum * {
      public static **[] values();
     public static ** valueOf(java.lang.String);
 }

  -keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
  }

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

Добавление следующего в proguard.cfg работает для меня.Я думаю, это потому, что вы не используете соты, но в библиотеке совместимости есть некоторые специфичные для соты вещи.

-dontwarn CompatHoneycomb -keep class android.support.v4. { *; }
-dontwarn **CompatCreatorHoneycombMR2
-dontwarn **ActivityCompatHoneycomb
-dontwarn **MenuCompatHoneycomb

Кроме того, удалите

libraryjars 'E:\Himanshu\AndroidViewPager\libs\android-support-v4.jar'
0 голосов
/ 30 октября 2012

У меня была такая же проблема.Оказывается, мне нужно обновить цель сборки проекта.

Похоже, что версия android-support-v4.jar должна соответствовать целевой версии сборки проекта, чтобы proguard работал.В моем случае android-support-v4.jar revision 10 необходимо настроить цель сборки Android 4.1.2 (API 16) в Project Explorer Project> Свойства> Android .

В AndroidManifest.xml, у меня все еще есть android:targetSdkVersion="13",Эта настройка, похоже, не связана с проблемой.

0 голосов
/ 03 ноября 2011

method void setShowAsAction(int) недоступен в библиотеке совместимости.Попробуйте использовать параметры XML-файла меню

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@[+][package:]id/resource_name"
      android:title="string"
      android:titleCondensed="string"
      android:icon="@[package:]drawable/drawable_resource_name"
      android:onClick="method name"
      android:showAsAction=["ifRoom" | "never" | "withText" | "always" |
                            "collapseActionView"]
      .../>
</menu>
...