Proguard с проект за android, използващ (съвместими) библиотеки

Опитвам се да използвам Proguard чрез вградената поддръжка на Proguard в Package Explorer Export > Export Android Application. Основният проект използва библиотечен проект, който от своя страна използва библиотеката за съвместимост на android, използва и самата библиотека за съвместимост. По принцип така:

BaseLibraryProject BaseActitivity 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

Eclipse (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