Android 在defaultConfig块中使用if语句定义minSdkVersion是否存在固有问题? 背景

Android 在defaultConfig块中使用if语句定义minSdkVersion是否存在固有问题? 背景,android,gradle,android-manifest,android-min-sdk,Android,Gradle,Android Manifest,Android Min Sdk,处理具有多个子项目(模块)的项目,这些子项目(模块)依赖于同一根项目中的某些库。出于某些测试功能的目的,我们需要更高的minsdk版本(21),但该minsdk版本对于应用程序的正常使用不是必需的,因为我们可以从版本14获得所需的一切。因此,我们尝试包含一些if逻辑,以将构建与生产目的分开。下面是讨论中的片段: android { compileSdkVersion 30 defaultConfig { // Default version necessary

处理具有多个子项目(模块)的项目,这些子项目(模块)依赖于同一根项目中的某些库。出于某些测试功能的目的,我们需要更高的minsdk版本(21),但该minsdk版本对于应用程序的正常使用不是必需的,因为我们可以从版本14获得所需的一切。因此,我们尝试包含一些if逻辑,以将构建与生产目的分开。下面是讨论中的片段:

android {
    compileSdkVersion 30
    defaultConfig {

        // Default version necessary for some reason.
        // minSdkVersion 14

        gradle.startParameter.taskNames.each {
            if (it.contains("AndroidTest") || it.contains("cAT")) {
                minSdkVersion 21
            } else {
                minSdkVersion 14
            }
        }
        targetSdkVersion 30

        versionCode getGitCommitCount()
        versionName getTag()

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}
简要问题: 在defaultConfig块中使用if语句定义minSdkVersion是否存在固有问题

进一步详情 我可以通过终端使用gradle包装进行构建,即
.gradlew build
,没有问题,但模块配置上有一个红色X,当我尝试运行它们时,我得到:

运行默认活动时出错,未找到

默认的活动肯定在清单中,在清除gradle缓存并重新启动Android Studio后运行良好。在我执行与gradle相关的任何操作(例如与gradle文件、建筑等同步)后,红色的X再次弹出

我确实找到了解决方法(注意上面代码段中注释掉的minsdkversion14定义),因为这可以解决运行错误,但我仍然不清楚为什么需要这样做

深入查看后,我在模块清单的合并清单选项卡中发现以下错误:

合并错误:错误:使用sdk:minSdk版本1不能小于library/src/main/AndroidManifest.xml中声明的版本14,因为库可能正在使用1中不可用的API建议:使用minSdk最多为1的兼容库,或将此项目的minSdk版本至少增加到14,或使用工具:overrideLibrary=“”强制使用(可能导致运行时失败)调试清单

你可以通过截图、源代码和我的理论看到更多的细节,到目前为止,我们正在更详细地讨论这一点,但还没有一个可靠的解释。如果在github上的讨论得出了一个可靠的结论,那么我将在这里添加这些细节,这样以后就不会因为断开的链接而丢失任何东西