问题标签 [dynamic-delivery]

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 回答
1644 浏览

android - 在 Marshmallow 6.0.1 上未找到 Android 动态交付资源异常

我正在关注谷歌示例以在我的应用程序中使用动态交付功能。我的示例应用程序在 pie 上运行良好,但在 marshmallow 6.0.1 自定义 rom 上崩溃,因为我的选项卡在 kitkat 4.4.4 之后不支持官方更新。我在内部测试中上传了应用程序(.abb),从我的手机(os pie)和我的标签(os marshmallow)上的Play商店下载,我在两者上运行应用程序,下载动态模块,成功下载后,我启动模块,模块在 Pie 上启动,但在 Marshmallow 上崩溃,找不到资源异常。经过一些研究,stackoverflow中有人说我只是更新版本代码并重新上传应用程序,它工作正常,所以我尝试修改版本代码并测试它在棉花糖上工作正常。

有人可以帮我看看我在这里缺少什么吗?

清单(动态模块)

构建 Gradle 文件(Dunamic 模块)

TestKotlin 活动(动态模块)

应用程序文件(基础应用程序)

BaseSplitActivity(基础应用程序)

主要活动(基础应用程序)

构建 Gradle 文件(基础应用程序)

0 投票
0 回答
52 浏览

android - 如果模块大小小于 10MB,则会显示动态交付用户确认对话框

我已经实现了一个大小为 4.6MB 的动态模块,根据谷歌文档https://developer.android.com/guide/app-bundle/playcore如果大小小于 10MB,那么我们不太可能得到用户确认对话框。

任何人都可以建议如何解决这个问题,因为如果大小小于 10MB,我不需要用户确认下载模块。

任何形式的帮助将不胜感激![在此处输入图像描述] 1

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 投票
0 回答
1115 浏览

android - 使用 React Native 的 Android 动态交付

我已经阅读了有关使用 Android App Bundles 为每个用户的设备配置生成和提供优化的 APK 的android Dynamic Delivery的信息,因此用户只下载运行您的应用程序所需的代码和资源。

我已经使用react-native创建了一个应用程序。我们如何启用基于用户需要的特征的动态交付作为特征交付

例如,应用程序具有两个功能,例如 Feature-A 和 Feature-B,并非所有人都需要。因此,用户将从 Google Play 商店下载基础 APK,之后的用户将下载他们要求或订阅的功能 APK。

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 投票
1 回答
256 浏览

android - 和有什么区别

谁能解释一下有什么区别

也有区别

提前致谢。

0 投票
1 回答
645 浏览

android - 通过动态交付功能加载 opencv_java4.so 文件时出错

我正在使用 Android 的动态交付功能,因为 openCV 使应用程序大小太大。问题是当我尝试使用SplitInstallHelper.loadLibrary(this, "opencv_java4"). 我给了我这个错误。

致命异常:主要 E AndroidRuntime:进程:com.example.com,PID:7470 E AndroidRuntime:java.lang.UnsatisfiedLinkError:dlopen 失败:找不到库“libc++_shared.so” E AndroidRuntime:在 java.lang.Runtime .loadLibrary0(Runtime.java:1016) E AndroidRuntime: at java.lang.System.loadLibrary(System.java:1669) E AndroidRuntime: at com.google.android.play.core.splitinstall.SplitInstallHelper.loadLibrary(Unknown Source: 0) E AndroidRuntime: 在 org.opencv.com.example.com.TempActivity.onResume(TempActivity.kt:615) E AndroidRuntime: 在 android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1434) E AndroidRuntime: 在 android. app.Activity.performResume(Activity.java:7304) E AndroidRuntime:在 android.app.ActivityThread。performResumeActivity(ActivityThread.java:3993) E AndroidRuntime: 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4033) E AndroidRuntime: 在 android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51) E AndroidRuntime: 在android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145) E AndroidRuntime: 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) E AndroidRuntime: 在 android.app.ActivityThread$H.handleMessage( ActivityThread.java:1977) E AndroidRuntime: 在 android.os.Handler.dispatchMessage(Handler.java:106) E AndroidRuntime: 在 android.os.Looper.loop(Looper.java:193) E AndroidRuntime: 在 android.app。 ActivityThread.main(ActivityThread.java:6923) E AndroidRuntime: 在 java.lang.reflect.Method.invoke(Native Method) E AndroidRuntime: 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) E AndroidRuntime: 在 com.android .internal.os.ZygoteInit.main(ZygoteInit.java:870)

我的onCreate看起来像这样

然后在onResume中加载openCV

这是我在 gradle 中用于openCV模块的defaultConfig 。

一些资源要求对 CMakeList.txt 和 dummy.cpp 文件进行更改

CmakeList.txt

假人.cpp