我不确定我是否误解了你的问题,但我会尝试解决它。对于下面的解释,我将多次引用Google 的此代码示例。我强烈建议克隆该回购并使用它,因为我认为它会回答您的问题。
如果我们使用 dagger、butterknife 之类的库......所有模块都将依赖于其他模块
正如其他人所提到的,您的所有功能都将使用的任何库都将进入您的基本功能。
如果我们的模块根据需要包含(视图),如何在不导入此模块的情况下实现到另一个视图(从另一个模块)的转换?
这个答案涵盖了它的概述 - 但这部分似乎是你问题的根源,所以我会尝试更深入地挖掘。
假设 Feature1 ( BrowseActivity
) 想要打开 Feature2 ( ItemDetailActivity
)。而不是直接调用 Feature1 startActivity(ItemDetailActivity.class)
,它必须使用下面的方法调用(这是因为 Feature1 无权访问 Feature2,ItemDetailActivity.class
因为它们不相互依赖)。
这是谷歌提供的代码示例
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com/itemdetail"));
intent.setPackage(getPackageName());
intent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(intent);
现在缺少的部分是在 Feature2 中,AndroidManifest
您需要声明ItemDetailActivity
正在侦听https://example.com/itemdetail
链接。这是来自 Google 的相关代码示例
<activity android:name=".ItemDetailActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="example.com" />
<!-- IMPORTANT -->
<data android:pathPrefix="/itemdetail"/>
</intent-filter>
<meta-data
android:name="default-url"
android:value="https://www.example.com/itemdetail" />
</activity>
有关更多信息,请阅读数字资产链接以及一般深度链接