Как да конфигурирате Proguard с помощта на Gradle?

Наскоро преминах към Android Studio / Gradle и се чудя как ProGuard може да бъде конфигуриран в скрипта build.gradle. Нов съм в Gradle, но си помислих, че конфигурирането на задачата Proguard би било добра идея (както е документирано в документацията на проекта Proguard.

Искам да конфигурирам Proguard да запазва картографирането в различни файлове за различни вкусове на продукта с настройката „printmapping“

task myProguardTask(type: proguard.gradle.ProGuardTask) {
     printmapping file("test.txt")
}

но се срива при изпълнение на задача с

Gradle: Execution failed for task ':module:proguardFlavorVariant'.
    > proguard.ConfigurationParser.<init>(Ljava/io/File;Ljava/util/Properties;)V

В по-новите версии на приставката за 'android' на Gradle Proguard изглежда е включен и мисля, че това може да е причината, поради която конфигурирането на задачата Proguard, както е посочено в документацията на Proguard, не работи. Но не намерих никаква документация по тази тема как да направя това с по-новия плъгин за android-gradle.

Благодаря за вашата помощ!


person max.mustermann    schedule 10.02.2014    source източник
comment
уверете се, че вашият конфигурационен файл на proguard е написан правилно, защото той показва грешка при анализиране, която обикновено идва, когато има нещо нередно във вашия файл proguard.   -  person pyus13    schedule 10.02.2014
comment
Благодаря за съвета ви, но моят proguard-файл трябва да е наред, защото работи, ако изпълня gradle build (включително proguard-task) без proguard-персонализиране в рамките на gradle скрипта.   -  person max.mustermann    schedule 10.02.2014
comment
защо не използвате runProguard true proguardFile getDefaultProguardFile('proguard-android.txt') в конфигурациите на аромати за различни вкусове.   -  person pyus13    schedule 10.02.2014
comment
Това е, което използвам в момента ;-), но просто се чудех дали има възможност да конфигурирам всичко в gradle, без да се налага да създавам още x файла за поддръжка.   -  person max.mustermann    schedule 10.02.2014
comment
добре, можете ли да включите целия файл build.gradle, защото мисля, че трябва да използвате някакво хранилище или класова пътека на зависимост, за да включите задачата proguard, не съм сигурен.   -  person pyus13    schedule 10.02.2014


Отговори (1)


Proguard е вграден в приставката за Android-Gradle и не е необходимо да го конфигурирате като отделна задача. Документите са на:

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard

Вашите вкусове толкова ли са различни, че наистина искате различни ProGuard конфигурации за тях? Мисля, че в повечето случаи можете да имате една конфигурация, която да ги покрие всички.

РЕДАКТИРАНЕ:

Ако искате да промените правилата на ProGuard за различни вкусове, Android Gradle DSL ви позволява да го направите. Примерът в документите показва как да го направите:

android {
    buildTypes {
        release {
            // in later versions of the Gradle plugin runProguard -> minifyEnabled
            minifyEnabled true
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }

    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'some-other-rules.txt'
        }
    }
}

Това трябва да се справи с вашия случай на употреба, освен ако не търсите начин да го накарате автоматично да определи стойността на proguardFile въз основа на името на вкуса, без да се налага да го задавате ръчно; можете да направите това чрез някои персонализирани Groovy скриптове.

person Scott Barta    schedule 10.02.2014
comment
Да, не е необходимо да го конфигурирам в отделна задача - но МОГА ЛИ ДА го направя? ;-). Искам да използвам различни конфигурации на proguard, за да наименувам mapping.txt според името на неговия вариант, така че да не пропусна кое картографиране принадлежи към конкретна компилация. Признавам, не е нищо голямо или някаква запушалка, но просто се чудех дали е възможно. - person max.mustermann; 11.02.2014
comment
Не се нуждаете от отделна задача на ProGuard, за да имате файлове за картографиране на вкус; Актуализирах отговора си. - person Scott Barta; 11.02.2014
comment
Това е, което в крайна сметка внедрих сега. Конфигурирането на proguard (въпреки просто свързването към външни файлове, които конфигурират proguard) изглежда не е възможно в момента, поне документацията не казва нищо за това. - person max.mustermann; 12.02.2014
comment
runProguard е променен на minifyEnabled, вижте тук. - person Elhanan Mishraky; 18.01.2015
comment
В допълнение към „proguard-android.txt“, Android SDK ви предоставя и файл „proguard-android-optimize.txt“, който вече има определени правила за оптимизиране на вашия код на ниво байт и вероятно ще ви помогне да направите приложението си размер по-малък. Вижте: developer.android.com/tools/help/proguard.html# enable-gradle - person Christian.D; 15.01.2016
comment
Здравей Скот, можеш ли да погледнеш въпроса ми тук? Благодаря ти ... - person Y.S; 23.05.2016