问题标签 [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 投票
2 回答
989 浏览

android - 从基本模块调用动态功能代码

我试图实现一个动态功能,我应该从我的基本模块中调用该功能中的一些方法,但它只能从该功能中调用基本方法,有什么方法可以从基本模块访问功能代码?(我了解未安装功能时会发生什么)

我已经使用默认的谷歌文档实现了它,所以我没有不同的代码或实现

今天没有动态功能,我有两个 .apk,我通过 AIDL 使用通信,我试图删除 AIDL 的使用并使用直接调用

0 投票
1 回答
66 浏览

android - 如何知道动态特征后的apk大小减少

我已将项目的一个模块分离为动态功能模块。但是我将如何测试以知道在分离模块后减少了多少(kb 或 mb)大小。如果不上传apk到google play store(内部跟踪)就可以了

0 投票
2 回答
1152 浏览

android - 如何从 .aar 文件中排除 .jar 文件

有没有办法从 .aar 文件中排除 .jar 文件。我的项目没有运行,因为我有一个包含 .aar 文件的模块,其中 Gson.jar 用作库,我的主应用程序中也需要它,因此我还需要实现 Gson 依赖项。当我尝试运行我的项目时,我收到了 multidex 错误:

任务 ':app:transformClassesWithBundleMultiDexListForDevelopmentBuildDebug' 执行失败。

com.android.build.api.transform.TransformException:生成主 dex 列表时出错。

请帮我解决这个问题。谢谢

0 投票
1 回答
542 浏览

android - 将 Unity Android Studio 项目转换为动态功能,而无需从一开始就将其资产复制到基础项目中

通常,必须将其转换为库才能将其嵌入到另一个应用程序中。但是,现在我想将其转换为动态功能。

我把它放在了 Unity 项目的清单中:

另外,我已经注释掉了bundle{}它的 Gradle 文件的一部分。如果我没有对此发表评论,我最终会收到以下错误:

Could not find method bundle() for arguments [build_9piysgasfu4pgl4v1ppx46cyn$_run_closure3$_closure12@44175a08] on object of type com.android.build.gradle.AppExtension.

我还确保UnityPlayerActivity那里扩展了我AppCompatActivity使用 的自定义SplitCompat.install(this)[虽然它扩展了Activity]。

现在我的问题是,由于某种原因Assets,Unity 项目没有在基础 APK 中注册,所以UnityPlayerActivity最终在启动时崩溃。

我究竟做错了什么?

编辑:错误堆栈跟踪如下:

编辑2:

经过进一步检查,我发现它mscorlib.dll不在mono.so 文件中,而是在 Assets 文件夹中。将 Unity 项目复制assets/bin/Data/...到基础项目中(复制到完全相同的路径中)是可行的……但这只是破坏了模块化的意义。

Unity 项目有什么方法可以使用它带来的 Assets 而无需在部署之前将其复制到 Base APK 中?

0 投票
2 回答
874 浏览

android - Android 应用程序链接到动态功能显示应用程序选择器对话框两次显示相同的应用程序

我正在尝试使用 Android App Links 打开一个 Activity。Activity 位于动态功能模块中,位于Google 的示例项目中。

我还没有将项目上传到 Google Play,所以我正在使用调试构建类型进行测试,运行配置包括 APK 的所有动态功能。

我要测试的代码是:

但是当我尝试导航到 URL 功能时,Android 会显示应用程序选择器对话框,其中两次显示相同的应用程序:

结果

你知道为什么会这样吗?这是预期的行为吗?

URL模块的Android清单

字符串

更新:我忘了提:我用我的更改了示例项目的应用程序 ID,并将著名的 Json 放在我的网站上。我使用 App Links Assistant 进行了检查,一切正常。

0 投票
3 回答
7088 浏览

android - 如何生成包含动态功能模块的完整 APK 文件

我的项目有动态功能模块,我想生成包含动态功能的调试或发布 APK。目前我只能获取基本 APK 文件。

基本上我会像普通应用程序一样生成一个APK文件。但我无法使用动态功能。是的,我知道动态功能将基于 AAB 工作。

有没有办法制作一个普通的(基础+所有模块)APK文件?请帮助解决这个问题。

谢谢

0 投票
4 回答
1314 浏览

android - 未找到动态功能中的活动(ClassNotFound)

完毕:

  1. 生成一个版本 a.abb
  2. 使用 bundletool 将 a.abb 转换为 a.apks。
  3. 将其部署到设备。

问题:

找不到动态功能中的活动。(但在调试中,没关系)

0 投票
1 回答
1593 浏览

android - 由于构建风味问题,无法添加动态功能模块

我想在现有应用程序中实现一个新的动态功能模块,但由于产品风味问题不得不放弃。

示例代码可以在这里找到。https://github.com/henningBunk/dynamic_feature_problem

我有三个模块:

  1. 应用程序。应用程序的主要模块。它有两种产品口味:

store:amazongoogle
pay_status:freepro

产生四种组合 :amazonFreeamazonProgoogleFreegooglePro

它取决于lib并列dynamic_feature为动态功能。

  1. 库。一个库模块,app并且dynamic_feature依赖于这个模块。lib只有pay_status味道。所以当我建立例如。应用程序作为googleFree风味,lib 将构建它的free风味。

  2. 动态特征。新功能应为动态功能。这个模块不应该有任何味道。这取决于应用程序和库。

三个 gradle 文件,简化为产品风格和依赖项,如下所示:

应用模块 build.gradle:

Lib 模块 build.gradle:

动态功能模块 build.gradle:

这会导致错误:

所以我读到该模块dynamic_feature可能需要缺少维度策略。添加

将dynamic_feature build.gradle 放入android.defaultConfig。这样我可以建立一些口味,但不是全部:

在此处输入图像描述

0 投票
1 回答
1478 浏览

android - 动态功能发布构建失败,资源重复

我正在创建一个示例来检查 android 提供的动态功能交付。我有以下方式的项目结构。基础项目应用程序和一个动态功能sample_dynamic_feature。动态功能交付所需的所有设置均已到位。当我在基本模块和动态模块中添加任何具有相同名称的布局文件或 .xml 文件时,就会出现问题。我在基础应用程序和动态模块中都添加了activity_main.xml 。我收到以下错误:

什么地方出了错:

适用于:

失败:

完整的堆栈跟踪:

例外是:org.gradle.api.tasks.TaskExecutionException:任务':app:packageReleaseBundle'的执行失败。在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77) 在 org.gradle. .api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59) 在 org.gradle.api.internal .tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java: ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java :55) 原因:org.gradle.internal.UncheckedException: java.util.concurrent.ExecutionException: com.android.tools.build.bundletool.exceptions.ValidationException: 模块'base'和'sample_dynamic_feature'包含条目'res/layout /activity_main.xml' 具有不同的内容。在 org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63) 在 org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java: ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99) ... 31 更多原因:java.util.concurrent.ExecutionException:com.android.tools.build.bundletool.exceptions.ValidationException:模块“base”和“sample_dynamic_feature”包含条目'res/layout/activity_main.xml' 具有不同的内容。在 com.android.ide.common.workers.ExecutorServiceAdapter.close(ExecutorServiceAdapter.kt:56) 在 kotlin.io.CloseableKt.closeFinally(Closeable.kt:53) 在 com.android.build.gradle.internal.tasks.PackageBundleTask .bundleModules(PackageBundleTask.kt:121) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) ... 44 更多原因:com.android.tools.build.bundletool。exceptions.ValidationException:模块“base”和“sample_dynamic_feature”包含具有不同内容的条目“res/layout/activity_main.xml”。在 com.android.tools.build.bundletool.exceptions.ValidationException$Builder.build(ValidationException.java:49) 在 com.android.tools.build.bundletool.exceptions.ValidationException$Builder.build(ValidationException.java:41)在 com.android.tools.build.bundletool.validation.EntryClashValidator.checkEqualEntries(EntryClashValidator.java:66) 在 com.android.tools.build.bundletool.validation.EntryClashValidator.validateAllModules(EntryClashValidator.java:52) 在 com.android .tools.build.bundletool.validation.ValidatorRunner.validateBundleModulesUsingSubValidator(ValidatorRunner.java:

这个捆绑包有什么不同?

0 投票
4 回答
1695 浏览

android-app-bundle - 卸载后如何删除动态功能模块?

我的应用程序有 2 个功能:“基础”和“扩展”。

清单扩展功能:

使用 SplitInstallManager 下载功能-> startInstall

使用SplitInstallManager 卸载 -> deferredUninstall

使用SplitInstallManager -> getInstalledModules检查已安装的模块

扩展功能正在从 Play 商店成功加载并按预期工作。当此功能变得不必要时 - 将其卸载。

更多,SplitInstallManager 有回调:SuccessListener、FailureListener、CompleteListener。安装和卸载完全成功(没有错误)。

但是,在卸载扩展功能后(并在重新启动应用程序后)它会保持安装状态。

如何从应用程序中删除已卸载的功能(不需要删除未使用的代码和资源)?