2014-10-21 6 views
20

У меня проблема с тем, что Proguard удаляет методы моего отладочного APK (мне нужно запустить proguard при отладке beccause ограничения файла dex файла), даже если они используются в Test apk. Например. Я использую метод GSON addProeprty в модульном тесте, но не в App apk. Этот метод удаляется и приводит к сбою теста. Но я не хочу настраивать proguard, чтобы просто сохранить все GSOn из-за ограничения файла dex, но также не хочу перечислять все методы отдельно. есть ли способ сказать rpguard рассматривать модульные тесты как точки входа в исходный код?Android-тесты с поддержкой proguard

ответ

1

Я решил эту проблему в своей сборке, имея дополнительный «dev» buildType, где я включаю proguard, но настраиваю его, чтобы сохранить весь код в моем собственном пакете, и несколько конкретных классов библиотеки, которые используются из только тесты. Я также отключил обфускацию в dev buildType, чтобы его можно было отлаживать из среды IDE.

Для отладочных и выпускных сборников я использую свои «настоящие» настройки proguard, включая обфускацию и оптимизацию.

+0

Вы можете поделиться аналогичным файлом proguard? –

+0

Спасибо, это должно сработать. Тем не менее, у нас есть несколько вариантов и модулей, и у них есть другой тип сборки для всех из них. Пользовательские правила proguard из другого ответа помогли. – Gaket

3

Контрольные тесты (и другие?) Не используют тот же файл proguard, что и apk отладки/выпуска. Вы можете попробовать установить опцию testProguardFile внутри блоков отладки и выпуска. Этот тестовый файл proguard может быть очень разрешительным, поскольку он не используется для apk отладки/выпуска.

25

Это то, что я сделал.

Добавить пользовательский файл правил 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' 
    } 
} 
+3

вы, сэр, потрясающие! – spy

+2

Я пропустил «тест» в testProguardFile в первый раз, когда я попробовал это решение, спасибо! –

+0

Это должен быть принятый ответ – Gaket

5

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

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

    android { 
        debug { 
         minifyEnabled true 
         testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project-test.pro' 
        } 
    } 
    
  2. файл ProGuard по умолчанию (и все папок tools/proguard), по-видимому not replaced by default при обновлении SDK инструментов через Студия Android. Моя машина использовала устаревший файл конфигурации, что вызывало странные проблемы с защитой. Чтобы обновить конфигурацию по умолчанию для proguard, замените ~/Library/Android/Sdk/tools/proguard/proguard-android.txt на this.

+0

Прошел только второй вопрос. Я думаю, стоит упомянуть, что с версии 2.2.0 плагина android для gradle 'proguard-android.txt' больше не используется, и вместо этого правила по умолчанию генерируются во время сборки. Источник: [Android-плагин для Gradle, версия 2.2.0] (https://developer.android.com/studio/releases/gradle-plugin.html) – aProperFox

Смежные вопросы