如何在已安装的应用程序版本中包含自定义逻辑

How to include custom logic in the installed version of the app

在我安装的应用程序版本中,我想要自定义逻辑。 它需要使用完全不同的Activity。 从 google 提供的多功能示例应用程序中,我在已安装的模块中添加了一个带有新 activity 和一些资源文件的 src 文件夹。 我还修改了已安装模块中的 manifest.xml,使其指向我添加的 activity。 不,当我尝试编译它时,它似乎不会包含新的 res 文件夹文件。我需要手动将它们包含在某个地方吗?

另外我不明白为什么你需要告诉安装的模块包含基础项目,因为其他功能项目已经包含它们。最奇怪的部分是基础项目本身再次包括功能和应用程序。它就像一圈夹杂物。它有多令人困惑。真的很想知道我是否是唯一一个对这种奇怪的架构感到非常困惑的人。

很难确定您要实现的目标但是 AFAIK 您可以通过首先在您的功能模块中添加此依赖项来检查当前实例是即时应用程序还是可安装应用程序来自定义您的逻辑

api "com.google.android.instantapps:instantapps:1.0.0"

然后在代码中检查

isInstantApp(Context context)

我找到了解决问题的方法。 首先,我也许应该更好地澄清我的用例。基本上我想要的是即时应用程序和可安装应用程序的不同活动。他们分享很多,但不是全部。可安装的 APK 确实有更多的扩展功能,因为即时应用程序非常轻便,没有共享、登录、设置等内容。同样在某些情况下,可安装应用程序有一个 activity 用于多个 screes/feature(使用片段替换),而即时应用程序每个 screen/feature 都有独特的活动。 我不喜欢一直使用 isInstantApp。我认为拥有尽可能多的共享核心逻辑的独立逻辑会更清晰。

所以我的可安装应用不是功能,它应该可以访问所有依赖项和所有功能逻辑。

我创建了以下模块:

  • 可安装(应用程序的 apk 版本)
  • instant(应用的即时应用版本)
  • base_feature
  • feature_A
  • feature_B
  • installable_combined

现在功能 A 和 B 的基础项目是 "base_feature"。 "base_feature" 有 "feature_A" 和 "B" 作为其特色项目。 "installable" 是正常的 "library" 取决于 "base_feature"、"feature_a" 和 "feature_b"

到目前为止效果很好。本质上,我为即时应用程序和可安装应用程序编写了单独的代码,但两者共享大部分逻辑。