Чи можна використовувати 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.