问题标签 [dynamic-feature-module]

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 投票
3 回答
831 浏览

android - 使用动态功能和构建风味时出现合并错误

使用 dynamic-feature-modules 可以定义AndroidManifest.xml模块是否应该预先安装:

或不:

我的项目中有两种构建风格。该模块应该预装在一种风格中,而不是另一种风格中。

这个想法是AndroidManifest.xmlmain源集中有这个默认值:

对于应该预先安装模块的构建风格 - 我创建了一个AndroidManifest.xml文件,将该dist:onDemand属性覆盖为false

不幸的是,这不起作用。清单合并失败并出现以下错误:

合并错误:错误:工具:在第 11 行为属性 dist:onDemand 指定了替换,但没有指定新值商店清单,第 10 行错误:验证失败,正在退出商店清单。

有谁知道这里有什么问题?

0 投票
0 回答
160 浏览

android - 按需动态功能模块安装始终返回已安装状态,但从不下载模块

我在我的应用程序中使用了按需动态功能模块,并使用 bundletool.jar 进行了测试。它可以从 aab 文件构建 apk。我上传到 googleplay 内部测试。我尝试调用installManager.startInstall(request)和 googleplay 服务不下载任何内容并始终返回安装状态。

0 投票
1 回答
519 浏览

android - 从 Android 动态功能模块将资产加载到 WebView

这个问题是关于当从 Google Play 加载应用程序时,将资产文件夹中的 HTML 内容加载到 Android 动态功能模块内的 WebView 组件中。你怎么能那样做?现在,当我的代码使用WebView.loadUrl.

请注意,这个问题不是关于如何将 HTML 内容加载到主 Android 'app' 模块内的 WebView 中。它也不是关于如何让它在模拟器上本地运行 - 在动态功能模块中的模拟器上加载 HTML 内容时,加载 HTML 内容可以正常工作。

我的项目具有以下结构:

所以模块 1 是一个 Android 功能模块,Fragment它加载了一个android.webkit.WebView应该加载资产的模块。但从 Google Play 加载应用程序时,无法加载 HTML 内容。

下面是模块 1 中的片段代码,它应该加载 HTML:

那么:如何从 Google Play 提供的动态功能模块加载 HTML?

更新 1:如果将 html 资产复制到app/src/main/assets文件夹中,上面的代码将起作用——但这显然不是我们想要的。从 Google Play 下载模块时,模块 1 的 webview 应该能够访问模块 1 的资产文件夹。

0 投票
0 回答
679 浏览

android - 打开动态模块时出现 NoClassDefFoundError

假设我创建了一个 Android 项目AwesomeApp。然后我需要向这个应用程序添加聊天功能。因此,我创建了另一个项目来构建用于聊天的 SDK。我的聊天 SDK 的输出是 4 个aar文件。这些aar文件包含另一个聊天 SDK 的Applozic.

然后我成功地将 4 个aar文件集成到我的文件中AwesomeApp,一切正常。但是aar文件太大了。所以我决定使用Android新的动态交付功能。

为此,我创建了新项目。在清单文件中,我提到了这样的应用程序名称android:name="com.google.android.play.core.splitcompat.SplitCompatApplication"。在这个项目中,我创建了一个动态模块chat-module。在这个动态模块中,我创建了一个活动DynamicActivity并添加了这 4 个aar文件。DynamicActivity我通过单击一个图标来调用(aar 文件的)聊天功能。

我可以成功下载chat-module并打开动态模块DynamicActivitychat-module但是当我点击打开/初始化聊天功能的图标时DynamicActivity- 应用程序崩溃了。崩溃报告:

请帮我解决问题。

0 投票
1 回答
2788 浏览

android - Android 动态功能模块依赖项

所以我有几个共享通用代码的功能——我们称它们为“feature1”和“feature2”。我无法将共享代码添加为“feature1”和“feature2”的依赖项 - Android Studio 引发以下错误:

打包同一个库的多个 APK 可能会导致运行时错误。将上述库添加为基本模块的依赖项将通过将库与基本 APK 打包来解决此问题。

所以我想我只是创建另一个动态功能模块——我们称之为“核心”——在那里提供共享依赖项。这也有效,有点。我可以从“feature1”和“feature2”中的“core”访问所有 java 类,但只要我想访问资源,就会得到 ResourceNotFoundException。这些功能是调用SplitCompat.install(context)onAttach()功能的交付片段。

所以我的问题是 - 是否有可能拥有一个存储通用代码的动态功能模块,或者这一切都应该放在应用程序中吗?

谢谢和问候, 罗曼斯基

0 投票
3 回答
698 浏览

android - Android功能模块依赖于另一个未找到资源的模块

我有我的基本模块(Base),一个动态功能模块(A)和一个不是动态功能的通用模块(Common),它是一个库。当我将 Common 添加为 A 的依赖项时,我可以使用其中的类,但我的构建失败,因为它无法从 Common 库中找到资源(错误:找不到符号 R.drawable.myimage)。

这是动态特征约束还是造成这种情况的原因?

0 投票
1 回答
2834 浏览

android - 如何在动态功能模块中启动 Activity?

Activity通过 Android Studio 运行配置在动态功能模块中启动时,我收到以下警告:The activity 'SomeActivity' is not declared in AndroidManifest.xml. (因为它是在AndroidManifest.xml动态功能模块中声明的)。作为参考,这是正在使用的库:

运行配置显示并部署了两个模块,但它只识别来自基本模块的活动AndroidManifest.xml如何在动态功能模块中启动 Activity?


旁注:尝试安装已部署的功能模块时,它似乎没有安装:

Where-5意味着SplitInstallErrorCode.API_NOT_AVAILABLE(可能是因为它是一个调试版本);尽管如此getInstalledModules(),应该找到已部署的功能模块......它没有。SplitInstallInfoProvider : No metadata found in AndroidManifest似乎是这个问题- 当部署“默认 APK”而不是“来自应用程序包的 APK”时,会安装功能模块。

0 投票
1 回答
566 浏览

android - 动态功能模块中配置更改后的 Resources$NotFoundException

我目前正在试验动态功能模块,遇到了一个奇怪的问题。onConfigurationChanged我通过在我的 Activity 中实现该方法并通过在清单中添加来定义它来处理配置更改android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|uiMode"。这适用于“普通”apk,但是 - 当我在动态功能模块中执行此操作时,我会Resources$NotFoundException在设备旋转后得到一个 - 对于在旋转之前已经正确解析的资源。因此,从我的角度来看,我缺少一些可以正确处理旋转的东西 - 我已经尝试在 中重新应用SplitCompat.install(<Context>)onConfigurationChanged但这也不起作用。有人知道我在做什么错吗?

这发生在我的 com.google.android.play:core:1.6.4 库中。

0 投票
2 回答
794 浏览

android - 带有匕首 2 的不同范围的单个实例

问题

我正在构建一个具有动态功能的应用程序。

为了向主模块和功能模块提供所有依赖项,我使用的是 dagger 2。功能组件取决于主组件,因此,功能组件的范围与主组件范围不同(@Singleton在这种情况下)

在主模块中注入的接口之一是在功能模块上实现的,并由主模块中的反射提供。该实现也用于功能模块中。

我遇到的问题是主模块中提供的实例与功能模块中的实例不同(因为范围),但我希望只提供一个带有 dagger 的实例。

代码

这里有一些代码,你可以在github中找到整个示例项目

主模块的匕首配置:

TestModule.kt

TestComponent.kt

功能模块的 Dagger 配置:

TestDependencyModule.kt

TestDependencyComponent.kt

预期结果

接口TestCTestA被注入MainActivity

接口TestBTestA被注入TestBroadcastReceiver

正如预期的那样,实现的实例TestA是唯一的,但对于 的实现TestB却不是这样。TestC取决于注入的那个与带有注释的TestB注入的TestC不同。TestBroadcastReceiver@TestScope

因此,运行您可以在此处找到的示例项目,我得到以下日志输出

注入的实例MainActivity

注入的实例TestBroadcastReceiver

我想TestB在两个模块中共享相同的实例。

有什么建议吗?提前致谢!

0 投票
0 回答
176 浏览

android - 动态功能模块中 Fragments 的 fragmentScenario Espresso 测试

有没有人想出如何使用fragmentScenario Espresso 单独测试动态功能模块中的片段,其中应用程序的活动位于基本模块中。

我已经克服了几个问题,例如关于样式不是 Theme.Appcompat 和 Android Studio 没有运行的抱怨,但现在在运行时抱怨它在片段的布局中withId找不到。R.id