Модульные тесты Android с включенной proguard
У меня проблема в том, что Proguard удаляет методы моего отладочного APK (мне нужно запустить proguard при отладке из-за ограничения файла dex метода), даже если они используются в тестовом apk. Например, я использую метод GSON addProeprty в модульном тесте, но не в приложении apk. Этот метод удаляется и вызывает сбой теста. Но я не хочу настраивать Proguard так, чтобы он просто сохранял все GSOn из-за ограничения файла dex, но также не хочу перечислять все методы отдельно. Есть ли способ сказать rpguard рассматривать модульные тесты как точки входа исходного кода?
4 ответа
Это то, что я сделал.
Добавьте пользовательский файл правил Proguard.
/project/app/proguard-test-rules.pro
# Proguard rules that are applied to your test apk/code.
-ignorewarnings
-keepattributes *Annotation*
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**
-dontwarn org.hamcrest.**
-dontwarn com.squareup.javawriter.JavaWriter
# Uncomment this if you use Mockito
#-dontwarn org.mockito.**
Добавьте следующее в build.gradle для вашего приложения. Использовать файл proguard при тестировании.
/project/app/build.gradle
android {
debug {
minifyEnabled true
testProguardFile 'proguard-test-rules.pro'
}
}
Ни один из приведенных выше ответов не помог мне. У меня было две проблемы: мне нужно было также использовать файл proguard по умолчанию для тестирования, и мой файл proguard по умолчанию был неправильным.
Чтобы использовать файл proguard по умолчанию, в дополнение к вашему:
android { debug { minifyEnabled true testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project-test.pro' } }
Файл proguard по умолчанию (и все
tools/proguard
папка), по-видимому, не заменяется по умолчанию при обновлении инструментов SDK через Android studio. Моя машина использовала устаревший конфигурационный файл, который вызывал странные проблемы с защитой. Чтобы обновить конфигурацию по умолчанию Proguard, замените ~/Library/Android/Sdk/tools/proguard/proguard-android.txt этим.
Инструментальные тесты (и другие?) Не используют тот же файл proguard, что и ваши apk отладки / выпуска. Вы можете попробовать установить testProguardFile
опция внутри блоков отладки и выпуска. Этот специфичный для теста файл proguard может быть очень разрешающим, потому что он не используется для apk отладки / выпуска.
Я решил эту проблему в моей сборке с помощью дополнительного "dev" buildType
где я включаю proguard, но настраиваю его так, чтобы весь код содержался в моем собственном пакете, а также несколько конкретных библиотечных классов, которые используются только из тестов. Я также отключаю запутывание в dev buildType
так что это может быть отлажено из IDE.
Для отладочных и релизных сборок я использую свои "настоящие" настройки proguard, включая запутывание и оптимизацию.