我如何从另一个功能模块访问活动

时间:2018-06-26 06:06:37

标签: android android-instant-apps

我正在创建一个即时应用程序,其中包括应用程序模块,基本功能模块,即时应用程序模块和另一个功能模块。问题是我无法从基本功能和功能模块访问应用程序模块的活动,而在基本功能模块和功能模块之间访问应用程序模块的活动,但是我可以从应用程序模块访问基本功能模块的活动。

现在我正在使用:

访问活动
Intent i = new Intent(this,
                    Class.forName("com.demo.test.appmodule.TextActivity"));

通过这种方法,studio在编译时不会显示任何错误。

  1. 两个不同功能模块之间是否还有其他通信方式?
  2. 为什么我能够从应用程序模块访问基本功能模块的活动,反之亦然?
  3. 我们可以从基本模块或任何其他功能模块访问应用程序模块的活动吗?

project structure

enter image description here

我可以使用一个链接来定义即时应用程序的项目结构

预先感谢

1 个答案:

答案 0 :(得分:6)

之所以无法在要素之间直接进行通信,是因为它们彼此独立。

处理此问题的正确方法是使用其URL进行调用,例如:android-instant-apps/hello-feature-module/HelloActivity.java

Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://hello-feature.instantappsample.com/goodbye"));
intent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(intent);

在即时应用程序结构中,库充当功能模块的库,功能内置在 APKs 中。在已安装的应用程序结构中,基础和功能均充当应用程序模块的库。一些解释可以在这里找到:

曾经有一个页面@ https://g.co/instantapps解释了即时应用程序的结构,但看起来好像丢失了。但是,您可以看一下:

不,您将无法直接从功能访问应用程序的活动。作为已安装的应用程序, com.android.feature 模块被编译/表现为 com.android.library 模块,因此在此处应用相同的规则:应用程序取决于库,而不是相反。要遍历该方向,您将需要使用与上面所示相同的Intent。

com.android.application 中的所有内容都将与即时应用程序的功能模块隔离开来,并且只会显示在已安装的应用程序中。