如何使用清单命令"replace"通过具有相同名称但在flavor包中的活动替换主包中的活动?
com.name.project/main/
-ActivityA
替换为
com.name.project/pro/
-ActivityA
答案 0 :(得分:1)
您可以通过为要覆盖的每个活动创建活动别名,然后在风格清单中覆盖别名的target_activity来实现此目的。
1)将活动的别名添加到主清单:
<div class="example example-cover">
<img src="https://i.stack.imgur.com/B0EAo.png">
<img src="https://i.stack.imgur.com/iYkNH.png">
<img src="https://i.stack.imgur.com/gne9N.png">
</div>
<div class="example example-contain">
<img src="https://i.stack.imgur.com/B0EAo.png">
<img src="https://i.stack.imgur.com/iYkNH.png">
<img src="https://i.stack.imgur.com/gne9N.png">
</div>
如果你的口味有不同的包名,那么在声明别名时使用$ {applicationId}很重要。这是因为您使用构建的包名称启动了活动别名。
2)更改启动您的活动的意图,使其launch it using the alias:
<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>
3)在flavor的清单中,声明替换活动,覆盖别名的目标活动以指向此新活动,并删除基本活动声明以获得良好的衡量标准:
Intent intent = new Intent();
String packageName = context.getPackageName();
ComponentName componentName = new ComponentName(packageName, packageName + ".aliasMain");
intent.setComponent(componenteduName);
请注意,清单标记中的包名称是基本包名称&#34; com.company.app&#34;。这意味着我必须在活动声明中包含包后缀。我故意这样做,因为它更明确。它还允许我使用节点:删除基础包中的活动。