Можно ли использовать proguard в режиме отладки?

В моем приложении для Android я хочу проверить некоторые функции с помощью proguard.

Мне не нужно действительно "отлаживать" его, но я хочу, чтобы proguard запускался, когда я нажимал run in eclipse. Я не хочу каждый раз экспортировать двоичный файл (так, в режиме деблокирования) и сохранять как apk и получать его на тестируемом устройстве.

Есть ли способ запустить proguard таким образом?

Update:

Кажется, что это возможно, если вы не, используя Eclipse; поскольку в заголовок вопроса не входит Eclipse, есть несколько правильных ответов на этот вопрос.

Ответ 1

Старый ответ:

http://developer.android.com/tools/help/proguard.html

ProGuard запускается только тогда, когда вы создаете приложение в режиме выпуска, поэтому вам не нужно иметь дело с запутанным кодом при создании приложения в режиме отладки.

Когда вы создаете приложение в режиме деблокирования, либо запустив ant release, либо используя мастер экспорта в Eclipse, система сборки автоматически проверяет, установлено ли свойство proguard.config. Если это так, ProGuard автоматически обрабатывает байт-код приложения перед упаковкой всего в файл .apk. Создание в режиме отладки не вызывает ProGuard, поскольку делает отладку более громоздкой.

Обновление: 13-3-2016

Это возможно с помощью новой системы сборки gradle. Вам нужно установить minifyEnabled в true в файле build.gradle. Как правило, у вас есть pro-guard, работающий в режиме деблокирования. Существуют и другие варианты, такие как сокращение ресурсов. Вы можете найти полезную информацию @http://tools.android.com/tech-docs/new-build-system

Также посмотрите @

http://developer.android.com/tools/building/configuring-gradle.html

 android {
   ...
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
     debug {

        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
   }
 }

Ответ 2

Если вы хотите упростить весь процесс сборки, вы должны перейти на gradle и Android Studio IDE.

Затем вы можете легко добавить в файл build.gradle следующее для запуска ProGuard:

android {
    buildTypes {
        release {
        }
        debug {
            minifyEnabled true
            proguardFile 'proguard-android.txt'
            zipAlignEnabled true
        }
    }
}

Это запустит ProGuard в вашей сборке отладки, настроенной с файлом "proguard-android.txt", который должен быть помещен в корневую папку проекта. И, кроме того, ваш apk выравнивается по zip (просто удалите "zipAlignEnabled true", если вы этого не хотите). Если вы хотите сделать то же самое для своей сборки релиза, просто добавьте эти три строки под "release".

Немного не по теме: такие вещи, как добавление зависимостей, подписание вашего apk или добавление других настраиваемых задач в процесс сборки, также являются более несложными с gradle. Кроме того, вы сможете не только построить свой apk через Android Studio IDE, но и с помощью простой команды в командной строке (например,./gradlew assembleDebug). Поэтому, если вы работаете в команде, процесс настройки для новых участников - это всего лишь один из них. /gradlew assembleDebug. Без необходимости какой-либо конфигурации IDE. Импорт вашего проекта, включая все зависимости, прост, как процесс с одним щелчком мыши

EDIT: Начиная с gradle Android Build Tools версии 0.14.0 имена свойств изменились (http://tools.android.com/tech-docs/new-build-system):

  • BuildType.runProguard → minifyEnabled
  • BuildType.zipAlign → zipAlignEnabled

Я обновил приведенный выше код.

Ответ 3

Что касается пользовательских Ant сборок (и на основе ответа Виктора), добавление следующего в мой файл build.xml для меня работает:

<target name="-debug-obfuscation-check">
    <!-- enable proguard even in debug mode -->
    <property name="proguard.enabled" value="true"/>

    <!-- Secondary dx input (jar files) is empty since all the jar files will be in the obfuscated jar -->
    <path id="out.dex.jar.input.ref" />
</target>

Обратите внимание, что мне пришлось переопределить (фактически заданный) out.dex.jar.input.ref; в противном случае более поздний запуск dx будет пытаться объединить непересекающиеся банки и выбросить DexException: несколько файлов dex определяют Xxx.

Ответ 4

Возможно, если вы построите с помощью Ant. См. пользовательскую сборку Android с помощью Ant о том, как создать проект с помощью Ant. Затем просто переопределите в проекте build.xml целевую "-debug-obfuscation-check" и установите для proguard.enabled значение true:

<target name="-debug-obfuscation-check">
    <!-- proguard is never enabled in debug mode -->
    <property name="proguard.enabled" value="true"/>
</target>

Ответ 5

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