Избегайте предупреждения «Конфликты выбора вариантов» при использовании тестового плагина Android без варианта выпуска

Что я хочу сделать и проблема

Я обновил свою Android Studio и Android Gradle Plugin до версии 3.0.1, а Gradle Wrapper — до версии 4.1 и теперь могу создавать и развертывать свой проект Android Gradle в варианте выпуска на устройстве через IDE.

  • #P3# <блочная цитата> #P4#
  • Проблема в том, что для модуля integration-test, использующего подключаемый модуль com.android.test, не существует варианта "выпуска".

  • #P6# <блочная цитата> #P7#

Подробнее о проекте (упрощенно)

Проект состоит из:

  • a :библиотечный модуль
  • модуль :app, который создает APK-файл приложения и использует модуль :library.
  • an :integration-test module which:
    • uses the "com.android.test" plugin
    • зависит от модуля :app через targetProjectPath ':app' и targetVariant 'debug'
    • и содержит инструментальные тесты для функций :app
    • содержит только «основную» папку (тестовый плагин не поддерживает другие)
  • Этот проект создан на основе схемы тестирования Android. здесь модуль :app ничего не знает о существовании модуля Integration-Test.

настройки .градле

include :library
include :app
include :integration-test

приложение/build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

publishNonDefault true

defaultConfig {
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion

    applicationId "xxxxx"

    testInstrumentationRunner rootProject.ext.testInstrumentationRunner

    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true
}

signingConfigs {
    release {
        keyAlias 'xxxx'
    }
}

buildTypes {
    debug {
        testCoverageEnabled = true
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

// This is needed by the integration-test module (i.e. com.android.test : integration test)
// in order for targetVariant to work without a flavor
publishNonDefault true

testOptions {
    unitTests {
        // Required so that logging methods do not throw not mocked exceptions in junit tests.
        returnDefaultValues = true
    }
}

compileOptions {
    sourceCompatibility rootProject.ext.sourceCompatibility
    targetCompatibility rootProject.ext.targetCompatibility
}
}

dependencies {
// Local dependencies
compile project(':library')
// i cleaned up all the other dependencies as they wouldn't help here
}

Вопрос

Кто-нибудь получил (интеграционный) тестовый модуль с помощью плагина com.android.test для запуска с Android Gradle Plugin 3.0.1 без получения ошибки «нет варианта выпуска» ? Если да, то как я могу избежать этой ошибки или как добавить такой вариант выпуска в модуль на основе тестового плагина Android (если это вообще имеет смысл)?


comment
Ваша библиотека содержит варианты, и ваше приложение не может выбирать между этими вариантами, попробуйте обновить Gradle Wrapper до версии 4.3, если это не работает, предоставьте свой файл build.gradle для приложения.   -  person    schedule 28.11.2017
comment
Обновление gradlew до 4.3 ничего не изменило. Я добавил запрошенный файл app/build.gradle. Для уточнения: в приложении есть выпуск и отладка типов сборки, библиотека сама по себе ничего подобного не определяет, но все варианты сборки в Android Studio показывают оба варианта (выпуск/отладка) для всех модулей, кроме модуля интеграционного тестирования, который имеет только debug, и поэтому я вижу ошибку, когда все остальные настроены на выпуск.   -  person hb0    schedule 28.11.2017
comment
Понятно, я предлагаю этот ответ для тех, у кого проблема похожа на вашу. Обратите внимание на другие ответы на тот же вопрос, которые могут быть вам полезны.   -  person    schedule 28.11.2017
comment
Выглядит интересно, но я не совсем понимаю: в каком build.gradle мне нужно определить configurations? 1) Тест интеграции не имеет зависимости :app/:library, он использует targetProjectPath ':app' и targetVariant 'debug' для установки зависимости, так как использует подключаемый модуль com.android.test. Модуль :app зависит от модуля :library. 2) Файл сборки :app не зависит от модуля :integration-test (ofc).   -  person hb0    schedule 28.11.2017
comment
Вам не нужно определять конфигурации, пока они вам не понадобятся. 1- integration=test не должен иметь зависимости app. 2-После того, как вы добавили integration=test в свою зависимость app, это сделало приложение зависимым от него. наконец, вы попробовали предложенное там решение, в вашем случае это будет implementation project(path path: ':library', configuration: 'default') вместо compile project(':library')   -  person    schedule 28.11.2017
comment
1) Модуль :integration-test тестирует :app, поэтому мне нужно определить :app как targetProject, иначе я не смогу выполнять на нем тесты. 2) Я не хочу, чтобы приложение :app знало о существовании модуля :integration-test. Возможно, в ближайшее время мы захотим выпустить приложение без кода модуля тестирования интеграции 3) С implementation project в :app для определения зависимости :library :app больше не будет собираться: ./app /build/intermediates/manifests/full/debug/AndroidManifest.xml не удается выполнить обработку (например, он не может найти: библиотечные ресурсы и т. д.) 4) Мне нужно создать пример проекта, когда я найти время   -  person hb0    schedule 28.11.2017
comment
Было очень сложно запустить эту чистую настройку (интеграционные тесты используют apk приложения, и приложение не зависит от модуля интеграционного тестирования), поскольку Android Build Tools 3.0.0 не смог объединить манифесты. Теперь я могу собрать, запустить все тесты и развернуть его, так что предупреждение — это то, с чем я могу жить какое-то время. Спасибо за все ваши предложения и пояснения. Я попытаюсь создать пример проекта для этой проблемы, но это может занять некоторое время. Эта установка создается после Blueprint: github.com/googlesamples/android- тестовые шаблоны/дерево/мастер/   -  person hb0    schedule 28.11.2017
comment
@ hb0 Есть ли шанс, что вы можете показать нам, как вы решили эту проблему? На данный момент я столкнулся с аналогичной проблемой с плагином com.android.test.   -  person jenzz    schedule 20.03.2018
comment
@jenzz: я ​​болею уже пару недель. Если я правильно помню, последнее состояние было просто предупреждениями, которые не были для меня большой проблемой в то время - прямо сейчас мои коллеги рефакторят проект, поэтому мы больше не будем использовать com.android.test, если честно... Извините.   -  person hb0    schedule 21.03.2018


Ответы (1)


я тоже получал

VariantInputs инициализирован без объединенного отчета манифеста: DEFAULT.

Затем я точно следовал тому, что указано в https://github.com/googlesamples/android-testing-templates/tree/master/AndroidTestingBlueprint

Ошибка исчезла, когда я удаил release buildType из блока `buildTypes' в файле Gradle тестового модуля. Из этого:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

to

buildTypes {
}
person cookie    schedule 24.08.2018
comment
Звучит многообещающе. К сожалению, я не могу проверить это прямо сейчас, так как у меня нет текущего проекта с ошибкой. Могут ли другие повторить исправление? Если да, то я отмечу это как правильный ответ. - person hb0; 29.08.2018
comment
Это сработало для меня. Я создал тестовый модуль в Android Studio, используя File->New->Library Project в качестве стандартного модуля библиотеки Android. Это создало файл build.gradle в стиле библиотечного модуля по умолчанию. Удаление buildTypes исправило ошибку gradle. - person dell116; 15.01.2019