即时应用程序(应用程序捆绑包)的可安装活动和即时活动

时间:2019-05-28 22:11:53

标签: android android-instant-apps

我很难为我的应用程序定义一个好的即时应用程序架构。 目前,该应用程序采用的是旧式即时应用程序结构。 现在,我正在将其转换为动态模块。到目前为止,我已经将其用于可安装版本。但是我很难使即时功能正常工作,因为我不知道如何正确定义入口点。 该应用程序仅是一项活动,并使用深层链接进行导航。 在旧的即时应用程序体系结构中,我曾经在每个功能模块中放置一个单独的manifest.xml,并带有自己的活动。可安装模块具有类似的功能。现在,对于动态模块,您必须从基本manifest.xml指向一个单独的活动,该活动也应位于同一基本模块中。

但这不是我想要的。可安装活动与即时应用程序有很大不同。

我目前有以下模块:

  • 基础
  • 组合
  • 功能_A
  • 功能_B
  • Feature_C

组合模块基本上是应用程序的可安装版本。 它包括所有功能模块,并且只有一个活动。 它还包含许多其他功能模块不需要的额外功能。 功能模块只是片段和逻辑。 基本模块包含所有共享逻辑。

现在我有以下问题:

  1. 在基本模块的manifest.xml中,必须定义默认活动。现在指向我的组合(可安装)模块的活动。 对于即时应用程序,我非常想让我拥有不同的默认活动。这可能吗?

  2. 我可以在基本模块内创建一个活动。但是从那里我无法到达任何模块中的任何班级/活动。因此,不能在基础模块中创建中间活动,也不能从基础模块中创建中间活动,具体取决于它是即时的还是已安装的,以加载正确的活动。该如何处理?

  3. 我是否需要在基本清单或每个动态模块中添加入口点(URL意向过滤器)?

2 个答案:

答案 0 :(得分:0)

首先,让我向您介绍blog: A simpler experience for instant appsCreate an instant-enabled app bundleAbout Android App Bundles

dist:onDemand | dist:instant

  • false | true =即时应用程序模块,也将包含在已安装的应用程序中
  • false | false =仅限安装的模块
  • true | false =“按需”仅安装的模块

第二,在新模型中,您会注意到com.android.application现在是“基础”。好的,很容易,您曾经使用过com.android.feature的“旧基础”现在将全部放在com.android.application内部(一开始很令人困惑,但是现在实质上就像一个库模块一样?)是的!

好吧,我假设您的“组合”曾经是com.android.application模块?您可以将其放入动态功能模块中:false | false(已安装),将其限制为已安装的应用。

您的“ Feature_X”模块(以前是您的非基础com.android.feature模块)现在都可以都是即时启用的动态功能模块:false | true(即时)。

现在,我认为默认活动对您而言仍然相同。您已安装的应用的MainActivity位于“组合”中,对吗?这样做应该没有问题,但是可能会有一个烦恼:从Android Studio运行,它只会识别com.android.application模块的清单,但是应该有一个指向android:exported="true"的技巧MainActivity解决这个问题。

无论您在何处进行设置,Instant Apps始终都会将default-url的位置用于其默认活动。所以,我觉得这对你还是一样吗?

现在的“ 无法到达”问题是,除了位于根目录的基础/应用程序之外,这些模块都无法互相看见。与以前不同,Combined / app至少可以将所有功能视为库。现在,您需要诉诸于它们的类名或它们的intent-filter / urls等。

入口点?它应该与之前的设置类似:

  • 作为已安装的应用程序:基本+ 组合 + a + b + c
  • 作为即时应用程序:基本+ (a,b,c)

但是我读错了吗?您当前的旧模型功能模块仅包含MainActivity的“片段”?每个人都没有自己的活动或每个人单独活动? (然后,作为一个已安装的应用程序,那些活动将被忽略,只为单个已安装的应用程序的活动收集片段?)

无论如何,您也可以考虑探索SplitInstall作为即时应用程序使用。 (是的,您还可以在即时模块上使用此拆分安装)

答案 1 :(得分:0)

  1. 在基本模块的 manifest.xml 中,必须定义默认活动。它现在指向我的组合(可安装)模块的活动。非常适合即时应用程序,我希望拥有不同的默认活动。这可能吗?

请查看这篇文章,了解如何在 Instant 模块中定义入口点并分别启动基本模块活动和 Instant Experience。

How to include instant dynamic feature module in instant app?