我很难为我的应用程序定义一个好的即时应用程序架构。 目前,该应用程序采用的是旧式即时应用程序结构。 现在,我正在将其转换为动态模块。到目前为止,我已经将其用于可安装版本。但是我很难使即时功能正常工作,因为我不知道如何正确定义入口点。 该应用程序仅是一项活动,并使用深层链接进行导航。 在旧的即时应用程序体系结构中,我曾经在每个功能模块中放置一个单独的manifest.xml,并带有自己的活动。可安装模块具有类似的功能。现在,对于动态模块,您必须从基本manifest.xml指向一个单独的活动,该活动也应位于同一基本模块中。
但这不是我想要的。可安装活动与即时应用程序有很大不同。
我目前有以下模块:
组合模块基本上是应用程序的可安装版本。 它包括所有功能模块,并且只有一个活动。 它还包含许多其他功能模块不需要的额外功能。 功能模块只是片段和逻辑。 基本模块包含所有共享逻辑。
现在我有以下问题:
在基本模块的manifest.xml中,必须定义默认活动。现在指向我的组合(可安装)模块的活动。 对于即时应用程序,我非常想让我拥有不同的默认活动。这可能吗?
我可以在基本模块内创建一个活动。但是从那里我无法到达任何模块中的任何班级/活动。因此,不能在基础模块中创建中间活动,也不能从基础模块中创建中间活动,具体取决于它是即时的还是已安装的,以加载正确的活动。该如何处理?
我是否需要在基本清单或每个动态模块中添加入口点(URL意向过滤器)?
答案 0 :(得分:0)
首先,让我向您介绍blog: A simpler experience for instant apps,Create an instant-enabled app bundle和About 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等。
入口点?它应该与之前的设置类似:
但是我读错了吗?您当前的旧模型功能模块仅包含MainActivity
的“片段”?每个人都没有自己的活动或每个人单独活动? (然后,作为一个已安装的应用程序,那些活动将被忽略,只为单个已安装的应用程序的活动收集片段?)
无论如何,您也可以考虑探索SplitInstall作为即时应用程序使用。 (是的,您还可以在即时模块上使用此拆分安装)
答案 1 :(得分:0)
请查看这篇文章,了解如何在 Instant 模块中定义入口点并分别启动基本模块活动和 Instant Experience。
How to include instant dynamic feature module in instant app?