Proguard с проектом Android с использованием библиотек (совместимости)

Я пытаюсь использовать Proguard через встроенную поддержку Proguard в Package Explorer Export > Export Android Application. Основной проект использует проект библиотеки, который, в свою очередь, использует библиотеку совместимости с Android, он также использует эту библиотеку совместимости. В основном так:

BaseLibraryProject BaseActivity libs: android-support-v4.jar MainProject использует библиотеку BaseLibraryProject libs: android-support-v4.jar

Это приложение работает нормально как на устройствах, так и на симуляторах. Однако Proguard выдает много предупреждений и существует с кодом 1.

Это последняя часть списка, связанного с Proguard:

[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView$OnQueryTextListener
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb$1: can't find referenced class android.widget.SearchView$OnQueryTextListener
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb$1: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: there were 131 unresolved references to classes or interfaces.
[2012-04-09 14:19:49 - MainProject]          You may need to specify additional library jars (using '-libraryjars').
[2012-04-09 14:19:49 - MainProject] Warning: there were 29 unresolved references to program class members.
[2012-04-09 14:19:49 - MainProject]          Your input classes appear to be inconsistent.
[2012-04-09 14:19:49 - MainProject]          You may need to recompile them and try again.
[2012-04-09 14:19:49 - MainProject]          Alternatively, you may have to specify the option 
[2012-04-09 14:19:49 - MainProject]          '-dontskipnonpubliclibraryclassmembers'.
[2012-04-09 14:19:49 - MainProject] java.io.IOException: Please correct the above warnings first.

Как видите: он не может найти библиотеку совместимости.

Это начало файла proguard.cfg с включенными параметрами -libraryjars и -dontskipnonpubliclibraryclassmembers:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-libraryjars libs/android-support-v4.jar

Не имеет значения. Я пробовал всевозможные комбинации добавления библиотеки в проект BaseLibrary/MainProject, полные имена путей. Кажется, ничего не помогает.

Большинство вопросов о stackoverflow в proguard, по-видимому, связаны с настройкой Ant. Есть идеи, что может быть причиной этой проблемы и как заставить Proguard работать над этим проектом, в котором используется несколько библиотек?

Заранее спасибо,


person Gerrit Beuze    schedule 09.04.2012    source источник


Ответы (1)


Выпуск ADT 17 принес много улучшений в работу Proguard, включая улучшенные значения по умолчанию, которые, я думаю, должны решить вашу проблему с библиотекой поддержки.

См. – http://tools.android.com/recent/proguardimprovements.

Затмение (project.properties)

Начиная с ADT 17, файл project.properties по умолчанию теперь включает следующую строку, которая ссылается на стандартный файл конфигурации Proguard (proguard-android.txt) и файл конфигурации Proguard для конкретного проекта (proguard-project.txt)...

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

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

Обновить

Gradle (build.gradle)

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

android {
    release {
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
 }
person denizmveli    schedule 09.04.2012
comment
Просто добавив строку proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt и удалив proguard.cfg, все заработало. - person Gerrit Beuze; 10.04.2012