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

Задайте различные minSdkVersion для testAndroid, чем для основного приложения.

Можно ли установить другие тесты minSdkVersion для тестов, чем для самого приложения? Я прошу, потому что я хочу использовать новую тестовую библиотеку поддержки и UI Automator для тестирования. Однако это доступно только для API 18+. В то же время я все еще хочу поддерживать более старые версии Android, хотя и не так тщательно проверены. Что мне нужно добавить в мой файл build.gradle для этого?

Чтобы уточнить, я использую Android Studio и "новую" структуру проекта Gradle.

4b9b3361

Ответ 1

Я получил это от нового шаблона тестирования от Google.

Создайте новый AndroidManifest.xml файл в папке test или androidTest.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:tools="http://schemas.android.com/tools"
    package="your.package.name">

    <uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/>
</manifest>

Ответ 2

Я загрузил пример решения mauricegavin/android-testing, поскольку я не мог найти себе рабочий.

Интересующий модуль ui/uiautomator/BasicSample/app. Вы заметите, что есть AndroidManifest.xml в каталоге androidTests. minSdkVersion, который вы укажете в app/build.gradle, будет использоваться для создания debug и release.

Вы увидите, что minSdkVersion в пример проекта build.gradle указывает api 17, который не поддерживается uiautomator и обычно приводит к сбою сборки.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.android.testing.uiautomator.BasicSample" >

    <uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/>
</manifest>

Спасибо mattblang за его ответ, который я использовал для этого примера.

Ответ 3

попробуйте этот.

defaultConfig {
    applicationId "com.test"
    if (gradle.startParameter.taskNames.contains(":app:assembleDebug")) {
        minSdkVersion 21
    }else{
        minSdkVersion 14
    }
    targetSdkVersion 22
    versionCode Integer.parseInt(VERSION_CODE)
    versionName VERSION_NAME
}

Ответ 4

Да, вы можете. Вы должны поместить тестовые записи манифеста в src/androidTest/AndroidManifest.xml. При построении тестов слияние манифеста будет сочетать оба манифеста, но при создании вашего приложения будет использоваться только основной AndroidManifest.xml.

Подробнее см. этот ответ.

Ответ 5

После публикации этого вопроса у меня также возникла идея установить minSdkVersion для разных значений для построений debug и release. Однако у меня не было возможности проверить, работает ли это или нет.

Я также нашел одну возможную работу из этого сообщения в блоге. Создайте отдельные ароматы test и production:

productFlavors {
    // The actual application flavor 
    production {
        minSdkVersion 14
    }
    // Test application flavor for uiautomatior tests
    test {
        minSdkVersion 18
    }
}

Ответ 6

@Code-Apprentice почти существует. Но вы не можете назвать вкус продукта "test", "androidTest" или "release". Они похожи на ключевые слова, и вы не можете использовать эти имена.

Итак, ответ

    productFlavors {
        product{
            minSdkVersion 15
        }
        uiautoTest {
            minSdkVersion 18
        }
    }

Ответ 7

Мое решение основано на конфигурации вкуса:

  • Разделить на два аромата:
buildTypes {
  release {...}
  debug {...}
}

productFlavors {
   dev { ... }
   autoTest {
      minSdkVersion 18 // set to 18 only in this flavor
      multiDexEnabled true // if you got dex index overflow error
      testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
   }
}
  1. переместите ваши зависимые от теста зависимости в "autoTestCompile"
// for test
autoTestCompile 'com.android.support.test:runner:0.5', {
    exclude group: 'com.android.support', module: 'support-annotations'
}
autoTestCompile 'com.android.support.test:rules:0.5', {
    exclude group: 'com.android.support', module: 'support-annotations'
}
autoTestCompile 'com.android.support.test.espresso:espresso-web:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
}
autoTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude group: 'com.android.support', module: 'design'
    exclude group: 'com.android.support', module: 'recyclerview-v7'
}
autoTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
}
  1. Run Test

Скриншот скрипта сборки

Ответ 8

Это самая хакерская версия. На создание этого сценария у меня ушёл почти день. Пожалуйста, примите это к сведению на память, но используйте это только в качестве крайней меры.

android.applicationVariants.all { variant ->

//Making specific variant disablements for faster build
if (variant.buildType.name.contains("debug")) {
    println "Making min version to 21 and disabling multidex"
    variant.mergedFlavor.setMultiDexEnabled false

    def versionMin = new com.android.builder.core.DefaultApiVersion(21)
    variant.mergedFlavor.setMinSdkVersion versionMin
    }
}

Ответ 9

Я получил следующий конфликт, для тестирования мне понадобился более высокий minSdkVersion.

Решение, которое я нашел, было взято из следующего документа с помощью buildType, изменившего тип тестовой сборки, и оно сделало всю работу за меня

Вот решение:

android {
defaultConfig {
    applicationId "com.doronkettner.ilikemovies"
    ...
    minSdkVersion 18
    ...
    testBuildType "staging"
    ...
    }
    ...
buildTypes {
    release {...}

    debug {...}

    staging {
        initWith(buildTypes.debug) // keep versionName and PIN from 'debug'
        defaultConfig.minSdkVersion 19
    }
}

Измените buildType на stage, и все должно быть в порядке

Ответ 10

С androidx вы можете принудительно использовать UI automator в версии <18 с помощью инструментов: overrideLibrary = "android_libs.ub_uiautomator"

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:tools="http://schemas.android.com/tools" package="..." >

    <uses-sdk tools:overrideLibrary="android_libs.ub_uiautomator"/>
</manifest> 

Но это может привести к сбоям во время выполнения, если вы запускаете свои тесты на версии <18