Android Studio одновременно создает два приложения для одного и того же проекта.

Я делаю приложение, используя Android Studio v0.5.9, который имеет проект библиотеки в качестве зависимости. Но каждый раз, когда я запускаю проект, на моем устройстве развертываются два apk с одинаковым именем и значком. Первый apk (приложение) содержит мой основной модуль, а второй — это сам проект библиотеки. Однако, когда я запускаю тот же проект из Eclipse, развертывается только один apk, и он отлично работает.

Вот несколько скриншотов проблемы -

введите здесь описание изображения

Первое приложение (мой модуль) -

введите здесь описание изображения

Второе приложение (проект библиотеки) -

введите здесь описание изображения

файл build.gradle верхнего уровня -

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

основной модуль build.gradle файл -

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'
    defaultConfig {
        packageName 'com.Swap.Rooms'
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:19.0.1'
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.android.support:appcompat-v7:19.+'
    compile project(':lib')
}

проект библиотеки build.gradle файл -

apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        packageName "com.jfeinstein.jazzyviewpager"
        minSdkVersion 4
        targetSdkVersion 17
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:+'
    compile files('libs/nineoldandroids-2.4.0.jar')
}

settings.gradle -

include ':app'
include ':lib'

Пожалуйста, помогите мне исправить это. Заранее спасибо!!


person Swap    schedule 08.06.2014    source источник
comment
Поделитесь файлом Gradle, пожалуйста   -  person Eugen Martynov    schedule 09.06.2014
comment
@EugenMartynov Я добавил файлы build.gradle, посмотрите, пожалуйста.   -  person Swap    schedule 10.06.2014
comment
Как связать два проекта. Вы можете поделиться settings.gradle?   -  person Eugen Martynov    schedule 10.06.2014
comment
@EugenMartynov Я добавил файл settings.gradle. Взгляни, пожалуйста.   -  person Swap    schedule 11.06.2014
comment
Я не вижу ничего, что могло бы создать два apk. Используете ли вы эту библиотеку github.com/jfeinstein10/JazzyViewPager?   -  person Eugen Martynov    schedule 11.06.2014
comment
@EugenMartynov да...   -  person Swap    schedule 11.06.2014
comment
На всякий случай, если вы удалите два приложения, Android Studio снова установит их оба?   -  person Eugen Martynov    schedule 11.06.2014
comment
@EugenMartynov да, Android Studio переустанавливает два apk ... Даже если экспортировать проект как подписанный apk и установить его локально, автоматически устанавливаются два apk.   -  person Swap    schedule 11.06.2014
comment
Давайте продолжим это обсуждение в чате.   -  person Eugen Martynov    schedule 11.06.2014


Ответы (4)


Возможно, это будет полезно для других.

Gradle также выполняет слияние манифестов для библиотечных проектов. Таким образом, проблема заключалась в том, чтобы сохранить AndroidManifes.xml без изменений в библиотеке. У него был узел application для демонстрационных целей, и этот узел был успешно объединен с основным AndroidManifest.xml.

Я собираюсь отправить вопрос в Google, так как я думаю, что он должен предотвратить или предупредить о такой ситуации.

person Eugen Martynov    schedule 11.06.2014
comment
Вы можете использовать опцию удаления инструментов слияния манифеста Android, чтобы переопределить поведение слияния на каждом узле в манифесте проекта библиотеки: в случае JazzyViewPager добавьте tools:node=remove в узел ‹activity› для MainActivity. (ПРИМЕЧАНИЕ: это для версии 0.8.2 Android Studio, так как они недавно изменили инструменты слияния манифеста) - person d370urn3ur; 12.08.2014

Ответ Евгения Мартынова правильный, но я решил повторить то, что он сказал, с точки зрения непрофессионала.

Просмотрите свои библиотеки и проверьте их AndroidManifest.xml. В одном из них должен быть тег <application>. Удалите тег, и проблема с двойным приложением будет решена.

person null    schedule 19.03.2015
comment
Ответ Кита [более] правильный. В вашей библиотеке может быть не только тег приложения, в ней также может быть определено действие! Пока у него нет намерений фильтра Launcher, все готово. - person nat101; 03.08.2016

Конкретным элементом в ApplicationManifest.xml, который влияет на создание нескольких значков запуска, является <intent-filter>, содержащий <category android:name="android.intent.category.LAUNCHER"/>. Удаление этого <intent-filter> даст вам контроль над количеством значков запуска. Вы можете прочитать немного более подробный ответ SO здесь.

person Kita    schedule 27.03.2015

Мне потребовалось время, чтобы понять, в чем проблема. Но, наконец, у меня все получилось. Проблема связана с файлом Manifest.xml. Это означает, что у вас есть две активности, установленные как LAUNCHER. просто удалите код, похожий на приведенный ниже, из действия, которое не является вашим LAUNCHER

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
person Kamau Mbûgua    schedule 18.03.2020