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

问题描述

背景

正在处理具有多个子项目(模块)的项目,这些子项目(模块)依赖于同一根项目中的某些库。为了实现某些测试功能,我们需要更高的minSdkVersion(21),但是对于正常使用应用程序来说,此minSdkVersion并不是必需的,因为我们可以从版本14中获得所需的所有东西。因此,我们尝试包括以下内容:为测试和生产目的分离构建的逻辑。有问题的代码在这里

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"
    }
}

摘要问题:

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

其他详细信息

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

找不到运行认活动的错误

认活动无疑是在清单中,并且在清除gradle缓存并重新启动Android Studio之后可以正常运行。在执行与gradle相关的任何操作(例如与gradle文件同步,构建等)之后,红色X会再次弹出

我确实找到了一种解决方法(请注意上面代码段中注释掉的minSdkVersion 14定义),因为它可以解决运行错误,但是我仍然不清楚为什么这是必要的。

从更深入的角度看,我在模块清单的“合并清单”选项卡中遇到以下错误

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

PR中,到目前为止,您可以看到有关屏幕截图,源代码和我的理论的更多详细信息,在此将进行更详细的讨论,但尚无明确的解释。如果在github上的讨论得出了可靠的结论,我将在此处添加这些详细信息,以免日后丢失任何损坏的链接

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...