Android清单合并:删除LAUNCHER intent-filter不会生效

Gav*_*iel 6 merge android intentfilter android-manifest android-launcher

在我的Android应用程序中,我使用了一个库项目,我使用它的一个活动.但是在库项目中,该活动具有MAIN操作和LAUNCHER类别intent-filter.所以我将该活动添加到我的清单并删除了intent-filter.清单似乎正确地合并到build/intermediates/manifests/full/debug/AndroidManifest.xml中,活动看起来像预期的那样(没有intent-filter):

    <activity
        android:name="com.michaelrnovak.util.logger.Logger"
        android:configChanges="orientation"
        android:label="@string/show_log" >
    </activity>
Run Code Online (Sandbox Code Playgroud)

但是,当我在模拟器中从AndroidStudio启动应用程序时,将启动库的Logger活动,而不是我的AlertsActivity.我究竟做错了什么?

这是图书馆的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.michaelrnovak.util.logger"
      android:versionCode="8"
      android:versionName="1.5">
    <uses-permission android:name="android.permission.READ_LOGS" />
    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity android:name=".Logger"
                  android:label="@string/app_name"
                  android:configChanges="orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />
</manifest> 
Run Code Online (Sandbox Code Playgroud)

我的应用程序清单具有以下相关活动定义:

    <activity
        android:name=".AlertsActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name"
        android:launchMode="singleTop" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />          </intent-filter>
    </activity>
    <activity android:name="com.michaelrnovak.util.logger.Logger"
        android:label="@string/show_log"
        android:configChanges="orientation"
        tools:replace="android:label"
        >
        <intent-filter tools:node="removeAll" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

Sam*_*ski 12

你有没有尝试过工具:node ="remove"只在类别节点上?根据我的经验,它似乎有效.

像这样的东西:

<activity android:name="com.michaelrnovak.util.logger.Logger"
        android:label="@string/show_log"
        android:configChanges="orientation"
        tools:replace="android:label"
        >
        <intent-filter>
            <category   tools:node="remove" android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

  • 只删除`<category>`对我来说不起作用,但同时删除它和`<action>`.`<activity android:name ="com.squareup.leakcanary.internal.DisplayLeakActivity"> <intent-filter> <action android:name ="android.intent.action.MAIN"tools:node ="remove"/> <category android:name ="android.intent.category.LAUNCHER"工具:node ="remove"/> </ intent-filter> </ activity>`这比我以前的改进了.非常感谢! (6认同)