Unresolved reference: applicationId
来源:3-2 组件化的构建和管理-1
慕码人3361747
2024-07-01
老师你好,我这边buildSrc中设置了isApp变量去动态切换module是app还是library。在module的配置中,如果isApp是true,正常编译通过。但是如果isApp = false,module的defaultConfig里的applicationId就会报找不到
module_home/build.gradle.kts:18:13: Unresolved reference: applicationId。
我知道applicationId在library里已经移除了,但是isApp = false到时候,貌似还是会进入 defaultConfig 里的ModuleConfig.isApp中进行编译
怎么解决呢:android 版本是2023.3.1
代码如下:
plugins {
if(ModuleConfig.isApp) {
alias(libs.plugins.android.application)
}else{
alias(libs.plugins.android.library)
}
alias(libs.plugins.jetbrains.kotlin.android)
}
android {
namespace = "com.k.module_home"
compileSdk = 34
defaultConfig {
if(ModuleConfig.isApp){
applicationId = “com.keke.module_home”
}
}
1回答
-
AI小慕
2024-11-12
核心问题在于当
isApp = false时,你的模块被配置为库(library)类型,在这种情况下,defaultConfig不应该包含applicationId。然而,根据你提供的代码片段,即使在库模式下,程序似乎仍尝试访问applicationId,导致编译错误。解决方案是确保只有当
isApp为true时才设置applicationId。此外,考虑到Kotlin DSL的语法特性,直接使用条件表达式来控制applicationId是否被定义是一种有效的方法。下面是修复后的完整代码:
plugins { if (ModuleConfig.isApp) { alias(libs.plugins.android.application) } else { alias(libs.plugins.android.library) } alias(libs.plugins.jetbrains.kotlin.android) } android { namespace = "com.k.module_home" compileSdk = 34 defaultConfig { minSdk = 21 // 假设这里有个最小SDK版本设置 targetSdk = 34 // 只有当ModuleConfig.isApp为true时设置applicationId if (ModuleConfig.isApp) { applicationId = "com.keke.module_home" } versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } // 其他构建配置... }解释
- 插件选择:基于
ModuleConfig.isApp变量值决定加载哪种类型的Android插件。 defaultConfig块:通过一个简单的if语句判断是否应该设置applicationId。如果当前项目不是应用而是库,则跳过applicationId的设置。
这样修改后,无论
isApp是什么状态,都不会因为尝试访问不存在的applicationId而引发编译错误了。00 - 插件选择:基于
相似问题