gpt4 book ai didi

Android Manifest 如何用 Flavor Activity 替换 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:55 26 4
gpt4 key购买 nike

如何使用 list 命令 "replace"用具有相同名称但在 flavor 包中的 Activity 替换主包中的 Activity ?

com.name.project/main/
-ActivityA

替换为

com.name.project/pro/
-ActivityA

最佳答案

您可以通过为每个要覆盖的 Activity 创建一个 Activity 别名,然后在风格的 list 中覆盖别名的 target_activity 来实现这一点。

1) 将您的 Activity 的别名添加到主 list 中:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.app">
<application>

<activity
android:name=".MainActivity"
/>

<activity-alias
android:name="${applicationId}.aliasMain"
android:targetActivity=".MainActivity"/>

</application>
</manifest>

如果您的口味有不同的包名,那么在声明别名时使用 ${applicationId} 很重要。这是因为您使用构建的包名称启动 Activity 别名。

2) 更改启动 Activity 的 Intent ,以便它们 launch it using the alias :

Intent intent = new Intent();
String packageName = context.getPackageName();
ComponentName componentName = new ComponentName(packageName, packageName + ".aliasMain");
intent.setComponent(componenteduName);

3) 在 flavor 的 list 中,声明替换 Activity ,覆盖别名的目标 Activity 以指向这个新 Activity ,并删除基本 Activity 声明以采取良好措施:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.company.app">

<application>

<activity
android:name=".flavor.MainActivity"/>

<activity-alias
tools:replace="android:targetActivity"
android:name="${applicationId}.aliasMain"
android:targetActivity=".flavor.MainActivity"/>

<activity
tools:node="remove"
android:name=".MainActivity"
/>

</application>
</manifest>

请注意, list 标签中的包名称是基础包名称“com.company.app”。这意味着我必须在 Activity 声明中包含包后缀。我故意这样做是因为它更明确。它还允许我在基础包的 Activity 上使用节点:删除。

关于Android Manifest 如何用 Flavor Activity 替换 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40964388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com