6

我正在尝试在 Unity 中合并来自 2 个插件的 android 清单文件,但是有两个具有相同意图过滤器的活动,我只能让 1 个或另一个同时工作....

在 2 个相互冲突的活动中,清单文件中位于顶部的活动将起作用。因此,如果清单 #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。

4

5 回答 5

6

例如,在您只想使用第一个活动作为启动器的清单中,您必须添加以下 2 个修改:

在清单的开头:

<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"属性

于 2015-01-26T14:53:29.003 回答
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"> ...

我相信会先尝试合并它,然后只替换导致启动器屏幕上的两个图标的意图过滤器

于 2015-04-28T22:51:58.607 回答
2

像这样声明您的清单标头:

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

然后将以下适当属性之一添加到相关活动:

tools:merge="override"
tools:merge="remove"
于 2014-02-25T07:36:48.173 回答
1

Activity有这个intent-filter

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>

Activity将在应用程序启动时启动的主要活动,您不能让两个活动同时工作。

你应该做的是只让一个活动(你的主要活动有这个过滤器)而让另一个没有它。

第二个Activity也将是应用程序的一部分,但它不会是Activity您将看到的第一个。您可以使用该startActivity()方法启动它。

于 2013-11-05T18:10:45.377 回答
0

我已经这样做了,解决方案是当您有多种口味时,例如 1. flavorA、2. flavorB 并且主应用程序 id 是 - com.android.vivek

主要风味A使用的是com.android.vivek,第二种风味B使用的是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>

然后只需简单的风味 B 的清单提及如下

 <?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 时,它会正常工作

于 2018-06-23T13:51:05.863 回答