定义了一个从属特性,但未设置包ID。您可能在基础特性中缺少功能依赖。

59

我正在跟随 Google Codelabs 中的一个教程,制作一个即时应用程序。

我正在尝试创建 topeka-ui(即时应用程序的 UI 功能模块)。

当我尝试运行其中一个即时应用程序模块时,它会显示:

  

已定义依赖功能,但未设置包 ID。     您可能在基础功能中缺少功能依赖项。


你在 topekaui build.gradle 中设置了 baseFeature=true 吗?因为数据绑定目前不支持非基础功能模块。我也这样做了,但遇到了你的问题。而且也找不到好的解决方案... - Mkr
我也还没有找到解决方案。 - erluxman
2
最让人恼火的是,我甚至找不到依赖功能定义的位置。没有日志,没有调试信息。在Android Studio中开发越来越糟糕了。真是太令人沮丧了。 - Gillis Haasnoot
9个回答

133

我遇到了一个问题,我有一个安卓应用和一个安卓库,但是我错误地使用了错误的插件。

对于应用:

plugins {
    id "com.android.application"
    id "kotlin-android"
}

对于一个图书馆:

plugins {
    id "com.android.library"
    id "kotlin-android"
}

4
非常感谢!由于某种原因,Android Studio 在库 gradle 中也自动创建了插件 ID“com.android.application”! - Idan

37

这是关于“已定义依赖功能但未设置包ID。您可能在基础功能中缺少功能依赖项”的唯一stackoverflow问题,因此我将在此回答我的问题,而不是创建新问题。我的模块出现了这个错误,但我无法找到问题所在。在依赖模块的build.gradle文件中,我有以下内容:

apply plugin: 'com.android.feature'

它本应该是这样的:

apply plugin: 'com.android.library'

1
谢谢好伙计!你救了我的一天!我永远不知道你是怎么发现那是错误的原因的。下次我创建新模块时需要使用Android库选项。然而,这个“库”不包含任何特定于Android的代码。 - Brian Reinhold
1
应用插件:'com.android.library',请纠正拼写错误@tim.paetz - Harish Gyanani
1
完美答案。 - Bhavesh Moradiya

11

我刚刚顺利地完成了AS 3.0 beta 2上的codelab (*注意)。在codelab的哪个阶段出现了问题?

可能是您错过了某个步骤。请仔细检查您的基础模块的build.gradle文件是否包含:

dependencies {
    ...
    application project(":topekaapk")
    feature project(":topekaui")
}

如果省略了feature project(":topekaui"),可能会导致以下错误:

Error:com.android.builder.internal.aapt.AaptException: A dependent feature was defined but no package ID was set. You are probably missing a feature dependency in the base feature.

注意:由于数据绑定已被禁用于非基本模块(https://issuetracker.google.com/63814741),因此在多功能步骤7中需要进行一些额外的步骤以解决这个问题(即摆脱DataBindingUtil)。


发布我的确切信息以帮助搜索引擎:Caused by: com.android.builder.internal.aapt.AaptException: 配置了依赖功能,但未设置包ID。 - methodsignature

11
你可能将依赖模块添加为应用程序,而应该将其添加为库。 检查模块的 build.gradle 文件并替换。
plugins {
    id 'com.android.application'

plugins {
    id 'com.android.library'

如果在defaultConfig块中添加了applicationId,请从内部模块的build.gradle中删除它


8

我在build.gradle(...mylibrary)中完成了它,修复了它,并且它正常工作:

plugins {
- id 'com.android.application'
+ id 'com.android.library'}

defaultConfig {
    - applicationId "com.example.mylibrary"
    minSdk 21
    targetSdk 32}

4

我在我的动态特性模块中遇到了这个问题,当时我忘记在基础模块的android.dynamicFeatures = [":module_name"]数组中添加对它的引用。


1

基于基础即时应用项目结构

当您构建即时应用时,此模块将获取所有功能并创建即时应用APK。它不包含任何代码或资源;它仅包含一个build.gradle文件,并已应用com.android.instantapp插件。以下是一个示例:

apply plugin: 'com.android.instantapp'
...
dependencies {
    implementation project(':base')
    // if there additional features, they go here
    implementation project(':feature1')
}

此外,请注意:

基础特征模块的构建配置文件需要应用 com.android.feature gradle 插件。 build.gradle 文件不包含任何即时应用程序特定的修改。

考虑到这一点,以及您遇到的错误,您可能需要检查您的基础特征模块的构建配置文件。最后,请确保您也将项目与 gradle 文件同步
有关更多信息,请参见{{link3:Android Instant Apps 文档}}。

警告:com.android.feature插件已被弃用,并将在未来的gradle插件版本中删除。请切换到使用动态特性或库。有关将应用程序转换为使用Android应用程序包的更多信息,请访问https://developer.android.com/topic/google-play-instant/feature-module-migration。 - gb96

1
使用以下Gradle插件
classpath 'com.android.tools.build:gradle:3.5.1'

在我的情况下,在应用程序的build.gradle中添加后:
android{
dataBinding {
        enabled = true
    }
}

我遇到了贴出的错误,然后进行了以下操作。
Android studio -> invalidate cache and restart

问题已经解决!

还没有解决?

可能在build.gradle中存在冲突的依赖项, 例如同一库的旧版本和当前版本


0

这个解决方案百分之百有效

步骤1)打开gradle.properties

步骤2)将android.enableJetifier=true添加到文件中

完成!

查看屏幕截图: enter image description here


它曾经起作用过一次,但在我第二次执行“Make Project”命令后就崩溃了。所以,这并没有帮助,但我不确定它是否只是针对我出现的问题。 - Bay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接