问题标签 [dynamic-feature]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7347 浏览

android - 无法在以下项目变体之间进行选择:features:myDynamicFeatureModule:

我正在我正在从事的项目中尝试使用 Android 的动态功能模块(又名按需模块)。

在我的 PoC(概念验证)项目中,动态功能模块 (DFM) 可以正常工作,并且 gradle 可以毫无问题地构建项目。在完成我的 PoC 后,我决定将其应用到现有项目中。但是,gradle 未能通过以下方式构建项目:

请注意,这个错误很长,会遍历所有可能的风格。

我尝试过但没有奏效的方法:

  • 我在动态模块中添加了与基本模块(my-app)完全相同的风格
  • 在我的 DFM 的 build.gradle 中,我尝试明确设置配置,例如:implementation project(path: ':my-app', configuration: 'default')以及配置:'someFlavor'
  • 在我使用的基本模块(my-app)的 build.gradle 中missingDimensionStrategy 'mydimension', 'myflavor'
  • 从 Android Studio 和终端构建
  • 从 build.gradle 文件中删除依赖项和其他代码

我已经尝试过并且有效:

  • 从 DFM 中删除基本应用程序 (my-app) 的依赖项(即删除 implementation project(':my-app',) ) - 但我需要它。澄清一下,DFM 应用了以下 gradle 插件:com.android.dynamic-featurekotlin-android
  • 从基本应用程序和 DFM 中删除所有风味 - 但我需要在基本应用程序中使用它们。
  • 我制作的 PoC 工作正常,即使使用与我在实际项目中使用的相同风格,gradle 也能编译项目

笔记:

  • 我使用 DexGuard(但我禁用了它以确保它不会干扰)
  • 我没有任何自定义构建类型,只有“调试”和“发布”
  • Gradle 版本是 3.5.2
  • Gradle 包装器是 5.5.1
  • PoC 和我的实际项目都使用相同版本的 gradle、gradle 包装器、构建类型和风格

不幸的是,我无法在单独的项目中重现该问题。我尝试从我的项目中删除尽可能多的东西,但我无法解决这个问题。

您是否知道可能导致此问题的原因以及我该如何解决?谢谢!

0 投票
2 回答
1015 浏览

android - 拆分安装 API 不可用。安装动态功能 Android Studio 时出现错误代码 - 5

我已将我的 .aab apks 包发布到内部测试发布模式。

当我尝试按需安装动态功能时,它给了我例外:

我不知道为什么这个 API 不可用为什么会出现这个错误。需要帮助谢谢。

0 投票
1 回答
846 浏览

android - 具有第三方库的动态功能,其清单中有一个带有自定义主题的活动 - 找不到资源

我的应用程序中有一个模块充当动态功能。

此动态功能模块使用第三方库,其中该第三方库在其 AndroidManifest 中有一个使用自定义主题的 Activity。

使用所描述的配置,应用程序可以正常编译,但是当我尝试运行它时,它会抛出一个错误,指出找不到该 Activity 主题的资源。

错误如下所示:

AGPBI: {"kind":"error","text":"Android 资源链接失败","sources":[{"file":"/Users/my_user/Documents/MyProject/App/AppName/build/intermediates/ metadata_feature_manifest/debug/processDebugManifest/metadata-feature/AndroidManifest.xml","position":{"startLine":40,"startColumn":8,"endLine":45,"endColumn":54}}],"original" :“/Users/my_user/Documents/MyProject/App/AppName/build/intermediates/metadata_feature_manifest/debug/processDebugManifest/metadata-feature/AndroidManifest.xml:41:9-46:55:AAPT:错误:资源样式/CustomTheme(又名 com.my.project.domain:style/CustomTheme) 未找到。\n ","tool":"AAPT"}

* 出了什么问题:任务 ':app:processDebugResources' 执行失败。执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade Android 资源链接失败 /Users/my_user/Documents/MyProject/App/AppName/build/intermediates/metadata_feature_manifest/debug/processDebugManifest/metadata-feature 时发生故障/AndroidManifest.xml:41:9-46:55:AAPT:错误:找不到资源样式/CustomTheme(又名 com.my.project.domain:style/CustomTheme)。

我认为这个问题与谷歌描述的以下问题有关:

在动态功能模块的清单中,您不应引用基本模块中不存在的资源。这是因为,当 Google Play 生成您应用的基础 APK 时,它会将所有模块的清单合并到基础 APK 的清单中。因此,如果基础 APK 的清单引用基础 APK 中不存在的资源,资源链接就会中断。

参考:https ://developer.android.com/guide/app-bundle/


如果第三方库未开放修改,如何使该项目运行?

0 投票
1 回答
1414 浏览

android - 如何使用动态功能模块中的 ExoPlayer cast 扩展来投射视频

当我尝试将 HLS 视频从我的应用程序投射到 chromecast 时发生崩溃。我使用 ExoPlayer cast 扩展。

我正在使用 exoplayer 版本2.11.1和播放服务演员框架版本18.0.0。该代码是从动态模块中调用的(apply plugin: 'com.android.dynamic-feature'在模块中build.gradle)。这是我的实现:

当我们创建 Fragment 时:

当用户单击 Cast 按钮时:

当用户单击我的应用程序中的投射按钮,然后在对话框中他们想要投射的设备上单击时,应用程序会系统地崩溃。这是堆栈跟踪

该应用程序在 Pixel 3 和 Pixel 3a 上崩溃,但在三星 S9 上不会崩溃。

有人可以告诉我我错过了什么吗?

0 投票
1 回答
1377 浏览

android - 未安装动态功能模块

我在我的应用程序上添加了一个按需动态功能模块,但我遇到了问题。

当我安装该功能模块时

打印以下日志

这让我相信动态功能模块已成功安装。但是当我尝试检查已安装的模块时:

它返回一个空列表。

有什么我想念的吗?


附加信息:

这是 a 的日志SplitInstallStateUpdatedListener

我还意识到,在INSTALLING日志之后,会打印以下内容:

这是什么意思?


附加信息2:

在 Pixel 3XL (Android 10) 设备上,按需动态功能模块已成功下载并安装。

但是,在摩托罗拉 G5 (Android 8.1) 设备上,仅下载按需动态功能模块,但从未安装。


附加信息3:

出于某种原因,下载和安装仅适用于 Android 10 设备,但我不知道为什么。


为了测试该功能,我使用了内部应用程序共享工具,我可以在其中上传应用程序包

0 投票
1 回答
76 浏览

android - 是否可以在开始下载之前获得动态功能模块大小?

我想知道在我们开始下载之前是否可以知道动态功能模块的大小。我在网络上的任何地方都没有找到答案=/。

0 投票
1 回答
207 浏览

android - 获取动态模块的 SplitInstallErrorCode.MODULE_UNAVAILABLE

SplitInstallErrorCode.MODULE_UNAVAILABLE尝试安装动态模块时出现以下错误。我已经在使用 Google Play 内部应用程序共享来测试aab文件,但仍然可以得到它。

这是动态功能清单文件:

这是我开始下载的方式:

我该如何解决这个问题?

0 投票
0 回答
165 浏览

android - Android:启动服务位于安装时动态功能模块中

我有两个模块:基本应用程序模块和安装时动态功能模块。DFM 包含一项服务。服务在 DFM 清单中声明,我在 Android Studio 的运行配置中检查要部署的 DFM。

如何从基本模块活动启动 DFM 服务?

我目前的代码是:

但是当我调用这个时,什么都没有发生。

仅供参考,如果我将服务移动到基本模块(并更正上面代码中的包和类名),服务将正常启动。

0 投票
0 回答
472 浏览

android - 模块“base”和“player”包含具有不同内容的条目“res/layout/exo_playback_control_view.xml”

我在一个具有多个动态模块的应用程序上工作。

为了将视频下载功能添加到我的应用程序中,我需要将 ExoPlayer UI 依赖项 ( com.google.android.exoplayer:exoplayer-ui:2.11.1) 添加到我的基本模块中。因为我的播放器模块中已经有了这个依赖,所以我有这个编译错误消息:

模块“base”和“player”包含具有不同内容的条目“res/layout/exo_playback_control_view.xml”。

由于我无法重命名 ExoPlayer 生成的布局文件,因此我尝试从我的基本模块中获取此文件,因为我只需要将它放入我的播放器模块中。

到目前为止,我已经尝试过:

这些作品中的任何一个。正如您可能看到的那样,我对 Gradle 感到不舒服。

我还在ExoPlayer Github 存储库上打开了一个问题。

有没有人有另一个想法来避免这个编译错误?

0 投票
1 回答
596 浏览

android - 请求拆分安装,但该应用程序不属于自己

我遇到了一个关于安装动态功能模块的非常奇怪的问题。它显示这些错误:

但是,如果我将完全相同的 *.aab 上传到internal app sharing,则一切正常。是否有可能导致此问题,我该如何解决?

谢谢!