Отладочная сборка Proguard Gradle, но не тесты

Я включил Proguard для сборки отладки, используя:

android {
    buildTypes {
        debug {
            runProguard true
            proguardFile 'proguard-debug.txt'
        }
        release {
            runProguard true
            proguardFile 'proguard-project.txt'
            zipAlign true
        }
    }
}

Проблема, с которой я сталкиваюсь, когда я делаю это, заключается в том, что сборка gradle хочет проводить тесты во время задачи proguardDebugTest. Я не могу изменить, чтобы получить доступ к этой конкретной задаче. Есть ли способ, которым я могу защитить отладочный apk, но не тестовый apk?

3 ответа

Решение

Положил

gradle.projectsEvaluated {
    proguardDebugTest.enabled = false
}

это в вашем сценарии сборки.

Здесь нужно знать две вещи:

РЕДАКТИРОВАТЬ:

Одно небольшое замечание: оно отключает задачу, но не дает сборки. Это связано с тем, что задача:preDexDebugTest не будет работать с включенной программой proguard. Лучшее решение, которое я нашел на данный момент, это отладка определенной конфигурации Proguard. Подробнее здесь. Создайте отдельный файл конфигурации Proguard, включите обычный файл Proguard, например:

-include proguard.cfg

и добавьте тестовый конфиг. Для меня это было:

-dontwarn org.mockito.**
-dontwarn sun.reflect.**
-dontwarn android.test.**

runProguard старый. Он был заменен на minifyEnabled

С minifyEnabled (и другими изменениями в новых версиях gradle) вы можете столкнуться с проблемами, когда конфигурация proguard работает для вашего отладочного apk, но не для инструментальных тестов. АПК, созданный для инструментальных тестов, будет использовать свой собственный файл proguard, поэтому изменение существующего файла proguard не будет иметь никакого эффекта.

В этом случае вам нужно указать файл proguard для использования в тестах инструментовки. Это может быть весьма допустимо, потому что это никак не влияет на ваши сборки отладки и выпуска.

    // inside android block
    debug {
        shrinkResources true  // removes unused graphics etc
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        testProguardFile('test-proguard-rules.pro')
    }

Введите новый тип сборки, "производный" от debug специфично для тестового приложения, которое снова отключает ProGuard, например

android {
    buildTypes {
        debugTest.initWith(debug)
        debugTest {
            minifyEnabled false
        }
    }
}

и использовать этот тип сборки для тестового приложения, назначив его имя testBuildType имущество

android {
    testBuildType 'debugTest'
}
Другие вопросы по тегам