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,导致编译错误。

解决方案是确保只有当isApptrue时才设置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而引发编译错误了。

0
0

Kotlin+组件化 打造AI语音助手App 解锁交互技能包

基于百度AI打造一款集WakeUp,TTS,ASR为一体的服务类助手App

219 学习 · 49 问题

查看课程