Модульные тесты 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 по умолчанию был неправильным.

  1. Чтобы использовать файл proguard по умолчанию, в дополнение к вашему:

    android {
        debug {
            minifyEnabled true
            testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project-test.pro'
        }
    }
    
  2. Файл 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, включая запутывание и оптимизацию.

Другие вопросы по тегам