问题标签 [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.
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-feature
和kotlin-android
- 从基本应用程序和 DFM 中删除所有风味 - 但我需要在基本应用程序中使用它们。
- 我制作的 PoC 工作正常,即使使用与我在实际项目中使用的相同风格,gradle 也能编译项目
笔记:
- 我使用 DexGuard(但我禁用了它以确保它不会干扰)
- 我没有任何自定义构建类型,只有“调试”和“发布”
- Gradle 版本是 3.5.2
- Gradle 包装器是 5.5.1
- PoC 和我的实际项目都使用相同版本的 gradle、gradle 包装器、构建类型和风格
不幸的是,我无法在单独的项目中重现该问题。我尝试从我的项目中删除尽可能多的东西,但我无法解决这个问题。
您是否知道可能导致此问题的原因以及我该如何解决?谢谢!
android - 拆分安装 API 不可用。安装动态功能 Android Studio 时出现错误代码 - 5
我已将我的 .aab apks 包发布到内部测试发布模式。
当我尝试按需安装动态功能时,它给了我例外:
我不知道为什么这个 API 不可用为什么会出现这个错误。需要帮助谢谢。
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/
如果第三方库未开放修改,如何使该项目运行?
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 上不会崩溃。
有人可以告诉我我错过了什么吗?
android - 未安装动态功能模块
我在我的应用程序上添加了一个按需动态功能模块,但我遇到了问题。
当我安装该功能模块时
打印以下日志
这让我相信动态功能模块已成功安装。但是当我尝试检查已安装的模块时:
它返回一个空列表。
有什么我想念的吗?
附加信息:
这是 a 的日志SplitInstallStateUpdatedListener
:
我还意识到,在INSTALLING
日志之后,会打印以下内容:
这是什么意思?
附加信息2:
在 Pixel 3XL (Android 10) 设备上,按需动态功能模块已成功下载并安装。
但是,在摩托罗拉 G5 (Android 8.1) 设备上,仅下载按需动态功能模块,但从未安装。
附加信息3:
出于某种原因,下载和安装仅适用于 Android 10 设备,但我不知道为什么。
为了测试该功能,我使用了内部应用程序共享工具,我可以在其中上传应用程序包。
android - 是否可以在开始下载之前获得动态功能模块大小?
我想知道在我们开始下载之前是否可以知道动态功能模块的大小。我在网络上的任何地方都没有找到答案=/。
android - 获取动态模块的 SplitInstallErrorCode.MODULE_UNAVAILABLE
SplitInstallErrorCode.MODULE_UNAVAILABLE
尝试安装动态模块时出现以下错误。我已经在使用 Google Play 内部应用程序共享来测试aab
文件,但仍然可以得到它。
这是动态功能清单文件:
这是我开始下载的方式:
我该如何解决这个问题?
android - Android:启动服务位于安装时动态功能模块中
我有两个模块:基本应用程序模块和安装时动态功能模块。DFM 包含一项服务。服务在 DFM 清单中声明,我在 Android Studio 的运行配置中检查要部署的 DFM。
如何从基本模块活动启动 DFM 服务?
我目前的代码是:
但是当我调用这个时,什么都没有发生。
仅供参考,如果我将服务移动到基本模块(并更正上面代码中的包和类名),服务将正常启动。
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 存储库上打开了一个问题。
有没有人有另一个想法来避免这个编译错误?
android - 请求拆分安装,但该应用程序不属于自己
我遇到了一个关于安装动态功能模块的非常奇怪的问题。它显示这些错误:
但是,如果我将完全相同的 *.aab 上传到internal app sharing
,则一切正常。是否有可能导致此问题,我该如何解决?
谢谢!