问题描述
背景
正在处理具有多个子项目(模块)的项目,这些子项目(模块)依赖于同一根项目中的某些库。为了实现某些测试功能,我们需要更高的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 (将#修改为@)