Библиотека совместимости Android Proguard - PullRequest
4 голосов
/ 01 ноября 2011

Здравствуйте, я пишу приложение, которое использует библиотеку совместимости, и я использую пейджер представления в приложении. Я также использую библиотеку панели действий, которую я получил по этой ссылке

https://github.com/johannilsson/android-actionbar

мой файл proguard.cfg выглядит так

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-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

#keep all classes that might be used in XML layouts
-keep public class * extends android.view.View
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.Fragment


#keep all public and protected methods that could be used by java reflection
-keepclassmembernames class * {
    public protected <methods>;
}

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

-dontwarn **CompatHoneycomb
-dontwarn org.htmlcleaner.*

и тогда мои defualt.properties выглядят так

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.

# Project target.
target=android-8
android.library.reference.1=../android-actionbar/actionbar
proguard.config=proguard.cfg

Однако, когда я запускаю компиляцию и подписываю свое приложение, я получаю диалоговое окно с текстом «Proguard возвратился с кодом ошибки 1. См. Консоль».

Итак, я смотрю на консоль, на которой написано следующее:

[2011-11-01 01:48:39 - Test App] Proguard returned with error code 1. See console
[2011-11-01 01:48:39 - Test App] proguard.ParseException: Unknown option 'Manager' in argument number 9
[2011-11-01 01:48:39 - Test App]    at proguard.ConfigurationParser.parse(ConfigurationParser.java:170)
[2011-11-01 01:48:39 - Test App]    at proguard.ProGuard.main(ProGuard.java:491)

Но это не очень много значит для меня, и я не знаю, что я должен делать, чтобы это работало? Любые идеи, которые я использовал этот сценарий proguard ранее в приложении, которое не использует библиотеку совместимости, однако, место, откуда я взял этот сценарий, говорит, что он должен работать с библиотекой совместимости, но это не так? Любой, у кого есть какие-либо идеи, будет очень признателен

=== РЕДАКТИРОВАТЬ ===

После удаления пробелов из моего пути сборки я смог продвинуться немного дальше, но все равно потерпел неудачу с ошибкой 1, теперь у консоли появился новый список ошибок, который теперь выглядит следующим образом.

[2011-11-01 14:01:20 - TestApp] Proguard returned with error code 1. See console
[2011-11-01 14:01:20 - TestApp] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator
[2011-11-01 14:01:20 - TestApp] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-01 14:01:20 - TestApp] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-01 14:01:20 - TestApp] Warning: there were 3 unresolved references to classes or interfaces.
[2011-11-01 14:01:20 - TestApp]          You may need to specify additional library jars (using '-libraryjars'),
[2011-11-01 14:01:20 - TestApp]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-11-01 14:01:20 - TestApp] java.io.IOException: Please correct the above warnings first.
[2011-11-01 14:01:20 - TestApp]     at proguard.Initializer.execute(Initializer.java:308)
[2011-11-01 14:01:20 - TestApp]     at proguard.ProGuard.initialize(ProGuard.java:210)
[2011-11-01 14:01:20 - TestApp]     at proguard.ProGuard.execute(ProGuard.java:85)
[2011-11-01 14:01:20 - TestApp]     at proguard.ProGuard.main(ProGuard.java:499)

Ответы [ 2 ]

5 голосов
/ 01 ноября 2011

Я предполагаю, что путь к вашему проекту содержит пробелы (и в данном случае слово Manager). В последнем плагине Android для Eclipse (ADT R14) все еще возникают проблемы с передачей путей, содержащих пробелы, в ProGuard. Альтернативные обходные пути:

  • Использовать сборку из командной строки на основе Ant. Проблема должна быть решена там.
  • Установите ProGuard 4.7 beta2 (или более позднюю версию). Это более мягко для пропущенных кавычек вокруг имен файлов, содержащих пробелы. Вы можете просто загрузить релиз и скопировать jar-файлы из proguard / lib в android-sdk / tools / proguard / lib.
  • Использовать путь к проекту без пробелов.
0 голосов
/ 01 ноября 2011

Может быть несколько вещей, но когда я столкнулся с этой проблемой, я сделал:

  • Обновление плагина ADT для Eclipse
  • Установите последнюю версию ProGuard в android-sdk / tools / proguard
  • Создайте новый проект в Eclipse и скопируйте все классы и ресурсы в новый проект
  • Настройка proguard в новом проекте
  • Экспорт!

Не знаю, предыдущий проект не работал, но я знаю, что этот трюк сработал для меня. Я надеюсь, что это поможет

...