Подтвердить что ты не робот

Proguard gradle отладка, но не тесты

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

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

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

4b9b3361

Ответ 1

Помещенный

gradle.projectsEvaluated {
    proguardDebugTest.enabled = false
}

в вашей сборке script.

Здесь есть две вещи:

  • Общая функция Gradle для включения/выключения задач.
  • Плагин Android Gradle предназначен для отложенного создания задач в afterEvaluate, поэтому вам нужно также отложить отключение задачи до afterEvaluate.

EDIT:

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

-include proguard.cfg

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

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

Ответ 2

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

С minifyEnabled (и другими изменениями в новых версиях gradle) вы можете столкнуться с проблемами, когда конфигурация proguard работает для вашего debug apk, но не для контрольных тестов. 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')
    }

Ответ 3

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

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

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

android {
    testBuildType 'debugTest'
}