Я думаю, что основная проблема в том, что androidTest
- это другая единица компиляции.app/src/androidTest
собирается в app-debug-androidTest.apk
, а app/src/main
собирается в app-debug.apk
.И поэтому Proguard во время assembleDebug
также не видит и не включает app/src/androidTest
в построение графика использования «встряхивания дерева», потому что он недоступен в пути к классам.Практически это означает, что код приложения, на который ссылаются только в тестах, не работает.
Эта тема соотносится с "Должен ли я изменить видимость с частного на общедоступный только для тестового доступа?"Дилем.В зависимости от того, какие тесты вы пишете, вы можете рассмотреть следующие вопросы:
- Всегда оставляйте дополнительные точки входа в приложение (используемые тестами) для отправки пользователям
release.apk
- Скомпилируйте основной apkиначе при запуске теста и снова принимаю на себя риск доставки пользователям не совсем того же кода, который выполняется тестом
К сожалению, я не знаю ни одного автомагического решения в данный моментпохож на all-open
плагин).Но можно решить проблему отсутствующих методов в индивидуальном порядке.
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt', 'proguard-project-ext.txt'
testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-test-project.txt'
}
}
proguard-project.txt
- конфигурация для app/src/main
и implementation
зависимостей proguard-project-ext.txt
- конфигурация для app/src/main
, которая содержит -keep
инструкции для каждого метода / поля, используемого только в тестах, которые были "ложно" удалены proguard.Я предпочитаю хранить его отдельно, условно удалить при публикации в google play proguard-test-project.txt
- конфигурация для app/src/androidTest
и ее androidTestImplementation
зависимостей.Обычно содержит -dontwarn net.bytebuddy.**
и т. Д. Хотя обратите внимание, что тестовый apk не поддерживает multidex, поэтому можно использовать метод ограничения 65k
, включив слишком много зависимостей.
Проверка android/platform/tools/base/studio-master-dev/./build-system/integration-test/test-projects/minify для справки по реализации.