Отладочная сборка 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
}
это в вашем сценарии сборки.
Здесь нужно знать две вещи:
- Общая функция Gradle для включения / отключения задач.
- Плагин Android Gradle специально откладывал создание задач в
afterEvaluate
поэтому вам также нужно отложить отключение задачи доafterEvaluate
,
РЕДАКТИРОВАТЬ:
Одно небольшое замечание: оно отключает задачу, но не дает сборки. Это связано с тем, что задача: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'
}