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

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

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

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

обновление:

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

5 ответов


Ответ :

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

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

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

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

это возможно с новой системой сборки gradle. Вам нужно установить minifyEnabled to true в своем построить.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'
    }
   }
 }

Если вы хотите сделать весь процесс сборки проще для вас, вы должны переключиться на Gradle и Android Studio IDE.

тогда вы можете легко добавить следующее в свою сборку.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 вообще. Импорт вашего проекта, включая все зависимости, так же прост, как процесс одного клика

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

  • BuildType.runProguard - > minifyEnabled
  • BuildType.zipAlign - > zipAlignEnabled

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


Что касается пользовательских сборок Ant (и на основе ответа Виктора), добавив следующее к моей сборке.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>

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


это возможно, если вы строите с Ant. См. Android пользовательская сборка с помощью Ant о том, как построить свой проект с помощью Ant. Затем просто переопределите в сборке проекта.XML-код цели "- "отладка" -запутывание-проверить" и установить программы ProGuard.enabled значение true:

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

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