如何使用清单命令"replace"将主包中的活动替换为具有相同名称但在风格包中的活动?
com.name.project/main/
-ActivityA
替换为
com.name.project/pro/
-ActivityA
发布于 2018-05-31 04:06:39
为此,您可以为要覆盖的每个活动创建活动别名,然后在风格的清单中覆盖别名的target_activity。
1)将您的活动别名添加到主清单中:
<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}是很重要的。这是因为您使用构建的包名启动了一个活动别名。
2)更改启动活动的意图,使其launch it using the alias
Intent intent = new Intent();
String packageName = context.getPackageName();
ComponentName componentName = new ComponentName(packageName, packageName + ".aliasMain");
intent.setComponent(componenteduName);
3)在风格的清单中,声明替换活动,覆盖别名的目标活动以指向这个新活动,并删除基本活动声明:
<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>
请注意,manifest标记中的包名是基本包名"com.company.app“。这意味着我必须在活动声明中包含包后缀。我故意这样做,因为它更明确。它还允许我在基本包中的活动上使用node:remove。
https://stackoverflow.com/questions/40964388
复制相似问题