【问题标题】:Android Dynamic Features not in .apk.apk 中没有的 Android 动态功能
【发布时间】:2018-12-10 22:38:21
【问题描述】:

我的项目包含一个名为feature_login的动态功能

AndroidManifest.xml 文件中,我将功能配置为included 而不是on demand

<manifest ...>
    <dist:module
            dist:onDemand="false" dist:title="@string/title_feature_login">
        <dist:fusing dist:include="true"/>
    </dist:module>
</manifest>

所以我假设给定的功能将默认包含在 .apk 文件中。但是当我使用 Android Studio 生成 .apk 时

似乎它不包含该功能,因为一旦我按下启动该功能的按钮,应用程序就会崩溃。

但当我使用 Run 按钮从模拟器上的 Android Studio 运行该应用时,该应用可以正常工作。

问题

  1. 动态功能是否适用于登录等用例?
  2. 如何构建包含动态功能的调试应用程序?
  3. 如果dist:onDemand="false"dist:fusing dist:include="true",.apk 中是否包含动态功能?
  4. 当您希望拥有单独的模块(例如登录、个人资料详细信息等)或更好地使用库模块时,动态功能是否适合?

【问题讨论】:

    标签: android kotlin-android-extensions


    【解决方案1】:
    1. 动态功能是否适用于登录等用例?

    如果您可以在仍然使用登录的同时将依赖项与应用的其余部分解耦,那当然可以。

    1. 如何构建包含动态功能的调试应用程序?

    通过使用bundletool 的应用程序包流或使用Android Studio。 您还可以将./gradlew assembleadb install-multiple 与所有相关的调试apk 一起使用。

    1. 如果dist:onDemand="false"dist:fusing dist:include="true",.apk 中是否包含动态功能?

    没有。融合标志与 .aab 相关。当目标设备在 API

    1. 当您想要拥有单独的模块(例如登录、配置文件详细信息等)或更好地使用库模块时,动态特性是否适合?

    我建议将动态功能模块用于面向用户的功能。所以例如个人资料、登录、购物车、PremiumWhatever 都是很好的起点。 有一些高级用例可以节省更多设备空间,但这些用例依赖于通过on demandconditional delivery 延迟交付。

    有关更多信息,我建议查看Plaid 示例应用程序或观看the presentations on the topic 之一。

    【讨论】:

      【解决方案2】:

      动态功能需要使用app-bundle,而不是APKs

      在调试应用时,您可以通过修改现有的run/debug configuration 来包含动态功能。

      首先,选择您想要的 Android App 配置,然后 在常规标签中要部署的动态功能下,选中部署时要包含的每个动态功能模块旁边的框 你的应用程序。

      【讨论】:

      • 你有没有试过你写的或者只是从某个地方复制粘贴它并期望它工作?! OP 询问是否生成 .apk 不运行配置
      【解决方案3】:

      如果选择了 Build APKs 选项,那么它将创建多个与您应用中的动态功能数量相同的 Apk。

      但似乎要求是创建一个具有所有动态功能的 APK,所以这样做

      a) 对于调试版本:

      编辑配置->常规->(查找要部署的动态功能选项)->选择所有动态功能以将它们包含到构建中->应用->确定

      b) 对于发布版本:

      生成签名的 App Bundle 并按照以下步骤操作:

      i) 从以下链接下载捆绑工具: https://github.com/google/bundletool/releases/download/1.5.0/bundletool-all-1.5.0.jar

      ii) 在终端或 android studio 终端中执行以下命令,位于上述包的同一目录中

      java -jar bundletool-all-1.5.0.jar build-apks --bundle {path/of/yours/.aab} --output {output/path}/name-of-output.apks --ks <key-path> --key-pass pass:{key-password} --ks-key-alias {key-alias}
      --ks-pass pass:{key-alias-password} --overwrite --mode=universal
      

      用您自己的值替换 {} 字符串,执行上述命令后,它将创建一个通用的 .apks 文件。 (注意它是 .apks ,而不是 .apk)

      iii) 将 .apks 安装到设备中:

      adb install -r <output/path>/name-of-output.apks
      

      希望它会有所帮助。

      【讨论】:

        猜你喜欢
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多