Чи можна використовувати proguard у режимі налагодження?


77

У своєму додатку для Android я хочу протестувати деякі функції з увімкненим Proguard.

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

Чи є спосіб запустити Proguard таким чином?

Оновлення:

Здається, це можливо, якщо ви не використовуєте Eclipse ; оскільки заголовок питання не включає Eclipse, на це запитання існує кілька правильних відповідей.


1
Можливо, ви захочете змінити прийняту відповідь тут, оскільки всі, включаючи плакат, погоджуються з помилкою, але вони не видалять її
Michael Mrozek

Танк вам. Я оновлю запитання. Поточна відповідь правильна для Eclipse, але назва запитання не включає Eclipse. Інші відповіді є правильними для IDE, крім Eclipse.
відвертий

Відповіді:


44

Стара відповідь:

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

ProGuard працює лише тоді, коли ви створюєте програму в режимі випуску, тому вам не доведеться мати справу з затуманеним кодом під час створення програми в режимі налагодження.

Коли ви створюєте програму в режимі випуску , або запустивши випуск мурахи, або за допомогою майстра експорту в Eclipse, система складання автоматично перевіряє, чи встановлено proguard.configвластивість. Якщо це так, ProGuard автоматично обробляє байт-код програми, перш ніж упакувати все у файл .apk . Побудова в режимі налагодження не викликає ProGuard, оскільки робить налагодження більш громіздким.

Оновлення: 13-3-2016

Це можливо завдяки новій системі побудови gradle. Вам потрібно встановити minifyEnabledзначення trueу файлі build.gradle . Як правило, ви працюєте в режимі звільнення . Є й інші варіанти, як-от скорочення ресурсів. Ви можете знайти деяку корисну інформацію @ 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'
    }
   }
 }

4
Але чи є спосіб? Я приймаю це громіздко. Мені не потрібний затуманений код, але я буду використовувати потужність обробки Proguard для вилучення функцій журналу тощо відповідно до його конфігураційного файлу.
франк

@frankish відповідно до того, що документ каже, що це ні. Однак я не знаю альтернативного способу. Цитата з документа "ProGuard працює лише тоді, коли ви створюєте програму в режимі випуску". згідно з цим твердженням, прямо
Рагхундан

9
Вам слід видалити свою відповідь, бути справедливим до інших. Це оманливе.
Раду

1
Ця відповідь здається правильною, якщо ви використовуєте Eclipse. Інші відповіді також правильні, але лише в тому випадку, якщо ви не використовуєте Eclipse. На даний момент важко як змінити прийняту відповідь, так і відредагувати зміст та назву запитання, оскільки це питання та його відповіді містять багато інформації.
франк

@frankish, ти завжди можеш відредагувати публікацію, якщо вважаєш, що її потрібно відредагувати,
отримавши

73

Якщо ви хочете полегшити вам весь процес збірки, вам слід перейти на 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", якщо ви не хочете, щоб це сталося). Якщо ви хочете зробити те ж саме для вашої збірки випуску, просто додайте ці три рядки під "випуск".

Трохи не по темі: речі, такі як додавання залежностей, підписання apk або додавання інших власних завдань до процесу збірки, також набагато складніші з gradle. Крім того, ви зможете не тільки створювати свій apk за допомогою IDE Android Studio, але й за допомогою простої команди в командному рядку (наприклад,. / 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

Я оновив наведений вище код.


Дякую @MrMaffen! Йти цим шляхом набагато простіше.
Jake Stoeffler

2
Android Studio автоматично вирівнює ваш файл .apk. : developer.android.com/studio/command-line/zipalign.html
Деніел Сторм

11

Щодо власних збірок 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.


7

Це можливо, якщо ви будуєте з 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>

1
Дякую! Це майже спрацювало для мене. Я додав нову відповідь, яка базується на вашій.
Джо Джо

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.