XxG*_*sxX 5 merge android manifest android-productflavors
如何使用manifest命令"replace"通过具有相同名称但在flavor包中的活动替换主包中的活动?
com.name.project/main/
-ActivityA
Run Code Online (Sandbox Code Playgroud)
替换为
com.name.project/pro/
-ActivityA
Run Code Online (Sandbox Code Playgroud)
您可以通过为要覆盖的每个活动创建一个活动别名,然后在风味清单中覆盖别名的 target_activity 来实现此目的。
<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>
Run Code Online (Sandbox Code Playgroud)
如果您的风格具有不同的包名称,则在声明别名时使用 ${applicationId} 非常重要。这是因为您使用构建的包名称启动活动别名。
更改启动您的活动的意图,以便他们使用别名启动它
意图intent = new Intent(); String packageName = context.getPackageName(); ComponentName 组件名称 = new ComponentName(packageName, packageName + ".aliasMain"); Intent.setComponent(组件名称);
在风味的清单中,声明替换活动,覆盖别名的目标活动以指向这个新活动,并删除基本活动声明,这样如果我们尝试启动它就会出错:
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,清单标记中的包名称是基本包名称“com.company.app”,而不是风味包“com.company.app.flavor”。我是故意这样做的,这样我就不必在清单中的其他地方写出整个包名称。
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |