我正在尝试合并Unity中2个插件的android清单文件,但有两个活动使用相同的intent-filter,我只能同时使用1个或另一个....
在两个冲突的活动中,清单文件中最重要的一个是可行的。因此,如果清单#1中的活动位于顶部,插件#1将起作用,但不起作用#2,反之亦然。
两个相互冲突的活动是:
<activity
android:name="com.devfo.andutils.DevfoUnityPlayerActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
和
<activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerProxyActivity"
android:label="@string/app_name" android:screenOrientation="portrait"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
有什么方法可以合并这两个并让他们从同一个应用程序工作?我正在使用Unity 3d。
答案 0 :(得分:6)
例如,在您只想将第一个活动用作启动器的清单中,您必须添加以下两个修改:
在清单的开头:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
对于要删除意图过滤器的活动,请添加以下代码:
<activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerProxyActivity"
android:label="@string/app_name" android:screenOrientation="portrait"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter tools:node="removeAll">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
重要的是在intent-filter标记中添加 tools:node =“removeAll”属性
答案 1 :(得分:2)
声明你的清单标题如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
然后将以下适当的属性之一添加到相关的活动中:
tools:merge="override"
tools:merge="remove"
答案 2 :(得分:2)
与@amarkovits的答案略有不同,我发现成功了:
<activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerProxyActivity"
android:label="@string/app_name" android:screenOrientation="portrait"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
tools:node="merge">
<intent-filter tools:node="remove"> ...
我相信它会首先尝试合并它,然后只替换在启动器屏幕上导致两个图标的intent过滤器
答案 3 :(得分:1)
拥有此Activity
的{{1}}:
intent-filter
是将在应用程序启动时启动的主<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
,您不能同时使两个活动同时工作。
你应该做的只是让一个活动(你的主要活动有这个过滤器)而离开另一活动。
第二个Activity
也将成为应用程序的一部分,但它不会是您将看到的第一个Activity
。您可以使用Activity
方法启动它。
答案 4 :(得分:0)
我已经做到了,解决方案是,当您有多种口味时,例如 1. flavourA, 2. flavourB 并且主要应用程序ID为-com.android.vivek
和主要风味A正在使用com.android.vivek 第二个flavorB正在使用com.android.vivek.flavorb
flavorA的清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.android.vivek">
<application xmlns:tools="http://schemas.android.com/tools"
android:allowBackup="true"
android:icon="@mipmap/flavorA_ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:icon" />
<activity
android:name=".ActivitySplash"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
然后像下面这样简单地调味flavorB的清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.android.vivek">
<application xmlns:tools="http://schemas.android.com/tools"
android:allowBackup="true"
android:icon="@mipmap/flavorB_ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:icon" />
<activity
android:name=".flavorB.SecondActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ActivitySplash"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter tools:node="remove">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
当您运行flavorA或flavorB时,它将正常工作