【问题标题】:increase targetSdkVersion for androidTest为 androidTest 增加 targetSdkVersion
【发布时间】:2017-02-13 16:41:49
【问题描述】:

目前我正面临一个我无法解决的问题。由于一个错误,我必须将较低的 targetsdkVersion 设置为 25(这是本文发布时可能的最大目标版本)

它的解决方案可能需要我很多时间来解决,所以同时我想为生产构建设置一个较低的 targetSdkVersion 和 25 只用于测试(androidTest 变体)。

我知道我可以通过添加新口味来做到这一点,但我想避免这种情况。

我的问题是,如何仅为 androidTest 设置与其他变体/配置不同的 targetSdkVersion?

【问题讨论】:

  • 更改manifest 文件。
  • 为什么要避免使用风味?我相信这是处理同一代码库的多个配置的推荐方式。否则,您需要在每次运行之前手动切换 gradle 文件。我相信这种情况下正好使用了口味。
  • 一个构建的 androidTest 已经生成了一个单独的 apk,它有自己的 minSdkVersion 和 targetsdkVersion。我认为没有必要为此使用新口味。
  • 应该可以在 androidTest apk 上设置不同的目标。无论如何,最近我能够将我所有的口味从 16 种减少到只有 4 种。我对口味有点厌烦,如果可能不需要的话,我不会使用新的。

标签: android testing gradle


【解决方案1】:

显然没有办法实现它。我终于不得不生成一个新的风味如下:

android {
    def defaultTargetSdk = 24
    def androidTestTargetSdk = 25

    defaultConfig {
        targetSdkVersion defaultTargetSdk
    }

    productFlavors {
        target24 {
        }
        target25 {
            targetSdkVersion androidTestTargetSdk
        }
    }

    // Remove target25Release as it's used only for testing purpose and wont be not needed on production.
    variantFilter { variant ->
        def buildTypeName = variant.buildType.name
        def flavorName = variant.getFlavors().get(0).name

        if (buildTypeName.equals('release') && flavorName.startsWith('target25')) {
            variant.setIgnore(true);
        }
    }
}

由于我已经需要一个带有 debug buildType 和 target 24 的变体,我只删除了我的 target25Release 变体,但如果不需要它,我可以编写以下内容来将 target 25 设置为所有调试变体:

android {
    def defaultTargetSdk = 24
    def androidTestTargetSdk = 25

    defaultConfig {
        targetSdkVersion defaultTargetSdk
    }

    buildTypes {
        debug {    
            defaultConfig {
                minSdkVersion androidTestTargetSdk
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    在您的manifest 文件中为minimum sdk leveltaargeted sdk level 添加以下代码,如下所示,

    <?xml version="1.0" encoding="utf-8"?>
    
    <manifest>
    
     <uses-sdk android:minSdkVersion="3" />  //replace 3 with required minimum version
     <uses-sdk android:targetSdkVersion="8" />   //replace 8 with required target version
    
    </manifest>
    

    【讨论】:

    • 恐怕这对我不起作用。我已经通过 gradle 将我的 targetSdkVersion 设置为我的默认目标,如果我将它写在 androidTest 目录的清单文件中,它会再次被 gradle 设置覆盖我的默认目标
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多