代码之家  ›  专栏  ›  技术社区  ›  david

运行应用程序在Android Studio中提供2个应用程序图标

  •  49
  • david  · 技术社区  · 11 年前

    我正在Android Studio中运行一个应用程序,它在Androi Studio中提供了两个应用程序图标。

    此外,我已经从Eclipse迁移到了AndroidStudio,现在我遇到了如何使logcat的颜色与Eclipse相同的问题。

    我的问题是,当我运行应用程序时,有两个应用程序图标,当我卸载它时,其中两个图标已被删除。这在Android Studio中正常吗? 我发现Android Studio可以从Eclipse复制密钥。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.mytrack.ph"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
        <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true"/>
    
    
    
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
    
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.VIBRATE"/>
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
        <!--  Google Map v.2 permissions -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    
        <!--  GCM permissions -->
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
        <permission android:name="com.example.gcm.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />
        <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
    
    
        <!--  Writing Persmission -->
        <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
        <uses-permission android:name="android.permission.WRITE_PROFILE" />
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
    
        <uses-permission android:name="android.permission.READ_PROFILE"/>
        <uses-permission android:name="android.permission.READ_CONTACT"/>
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
    
            <activity android:name="com.mytrack.ph.SplashActivity"
                 android:label="@string/app_name"
                 android:noHistory="true" 
                 android:screenOrientation="portrait"
                 android:theme="@style/splashScreenTheme" >
                 <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name="com.mytrack.ph.LoginActivity"
                android:label="@string/app_name" 
                android:screenOrientation="portrait"
               >
            </activity>
            <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
            <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="@string/google_map_api_key"/>
            <activity android:name="com.facebook.LoginActivity"
                      android:theme="@android:style/Theme.Translucent.NoTitleBar"
                      android:label="@string/app_name" />
            <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
            <service android:name="com.my.track.service.MyTrackService"></service>
            <receiver
                android:name="com.my.track.service.MyTrackGcmBroadcastReceiver"
                android:permission="com.google.android.c2dm.permission.SEND" >
                <intent-filter>
                    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                    <category android:name="com.my.track.service" />
                </intent-filter>
            </receiver>
    
            <service android:name="com.my.track.service.MyTrackGcmIntentService" />
            <activity android:name="NavigationMenuActivity" 
                android:configChanges="orientation|keyboardHidden" 
                android:screenOrientation="portrait"
                android:launchMode="singleTop"
                android:permission="com.google.android.c2dm.permission.SEND" >
                 ></activity>
            <receiver android:name="com.my.track.results.ConnectionChangeReceiver" >
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
                </intent-filter>
            </receiver>
    
    
        </application>
    
    </manifest>
    

    我觉得这在android工作室很正常。运行应用程序会显示两个启动程序图标。 PS(秒):

    我的 AndroidManifest.xml 在里面 主要的 文件夹,我使用eclipse导出到gradle构建。

    我使用Android Studio 0.8.6 谢谢

    8 回复  |  直到 7 年前
        1
  •  73
  •   david    11 年前

    我得到了它!是的,我终于要学习成绩了。

    实际上,我在项目中有两个android项目,一个是库,另一个是主应用程序。

    我发现,当我导入这些项目时,AndroidStudio(我从eclipse将lib导出到gradle build)并不关心这是一个lib项目还是一个主项目。(如果我错了,请纠正我)。

    因此,使其工作的唯一方法是移除 intent-filter libandroid项目。

    编辑: @全部 解决了它!感谢大家,我从未知道还有另一个AndroidManifest.xml,我认为eclipse删除了它。我认为将它导出到gradle将删除它,因为它被检查为库。

    谢谢你的帮助。

        2
  •  45
  •   Kita    9 年前

    这个 <intent-filter> 影响创建多个启动器图标的是以下图标:

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

    Android Studio的 manifest merger 将始终结合 <意图过滤器> 将库项目中的s导入到主项目的清单中。你可能会有多个 LAUNCHER 意图在合成清单中,因此具有多个启动器图标。要避免这种情况,只需删除 发射器 库项目清单中的意图。

        3
  •  13
  •   Vicky Mahale    8 年前

    您在AndroidManifest上声明了两个意向过滤器,在活动中仅使用了一个意向过滤器。

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

    如果你在AndroidManifest中使用了两个或多个意向过滤器,那么你将有两个应用程序图标,所以删除它&设置一个意向过滤器。

    我希望这对你有用。

        4
  •  8
  •   Rio Cat    9 年前

    我同意,因为我做了两个活动(一个是飞溅,一个是主要)。在清单中我忘记删除了

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

    所以最后当我安装应用程序时,我将拥有2个应用程序。

        5
  •  7
  •   Sugoi Reed    7 年前

    很可能有一个导入的库项目具有此意向筛选器。

    1. Open your app manifest
    2. At the bottom left click on "Merged Manifest"
    3. Search and find which library project has the attribute
    
          <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>
    4. Remove it and ensure that now the filter is only on your App's <Application >class activity.
    
        6
  •  1
  •   Samuel Aktar Laskar    4 年前

    在我的例子中,这只是因为在清单文件中,两个活动被声明为启动器。实际上,我在创建新活动时单击了启动器复选框,以为它会将启动器标记从上一个活动转移到这个活动,但它将两个活动都创建为启动器。

        7
  •  -1
  •   Samuel Liew cicero lopes    7 年前

    在运行android并进行调试时,src/debug下还有一个AndroidManifest.xml。确保此清单文件与src/main下的主清单文件匹配。

        8
  •  -3
  •   Neo    3 年前

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
         
    
        <activity android:name=".MainActivity">
    
           <!You need to delete launcher intent filter from every other activity ->
    
        </activity>
    

    “android.intent.category.LAUNCHER”意图过滤器决定当您点击应用程序图标时将启动哪个活动。如果有超过1个条目,OS将在安装后创建多个应用程序图标。您需要确保Manifest文件中有一个以上意图筛选器的条目。