การรวมกันของประกาศล้มเหลวโดยมีข้อผิดพลาดหลายอย่างใน Android Studio


251

ดังนั้นฉันเป็นผู้เริ่มต้นใน Android และ Java ฉันเพิ่งเริ่มเรียนรู้ ขณะที่ฉันทดลองกับเจตนาในวันนี้ฉันเกิดข้อผิดพลาด

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs

ฉันพบวิธีแก้ไขปัญหาบางอย่างที่นี่และพยายามนำไปใช้ แต่ไม่ได้ผล

นี่คือ build.gradle ของฉัน:

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.0"

defaultConfig {
    applicationId "com.example.rohan.petadoptionthing"
    minSdkVersion 10
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
}

นี่คือ AndroidManifest ของฉัน:

<?xml version="1.0" encoding="utf-8"?>

package="com.example.rohan.petadoptionthing" >

<application

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <activity android:name=".Second"
        />

    <activity android:name=".third"/>
    <activity android:name=".MainActivity"/>


</application>

นี่เป็นสัปดาห์แรกของฉันที่มีการเขียนโค้ดฉันขอโทษถ้านี่เป็นสิ่งที่โง่จริงๆ ฉันใหม่จริง ๆ นี้และไม่พบที่อื่นที่จะถาม ขออภัยถ้าฉันทำผิดกฎ


2
ลบบรรทัด <activity android: name = ". MainActivity" /> ในไฟล์ menifest.xml ของคุณ
Pankaj Talaviya

10
สำหรับข้อมูลโดยละเอียดเกี่ยวกับข้อผิดพลาดคุณสามารถตรวจสอบ Gradle Console ใน Android Studio ที่มุมล่างขวา
DragonT

ฉันหวังว่าลิงก์นี้จะมีประโยชน์
Mortreza AD

ฉันได้รับข้อผิดพลาดเดียวกัน แต่แก้ไขได้โดยรักษา SDK ขั้นต่ำที่เหมือนกันในโครงการและไลบรารี
ราชา Jawahar

youtu.be/K88WaSm3q8Y "การควบรวมรายการล้มเหลวด้วยข้อผิดพลาดหลายอย่างใน Android Studio" หรือไม่
Roman Pokrovskij

คำตอบ:


967

ประจักษ์เปิดโปรแกรม ( AndroidManifest.xml) Merged Manifestและคลิกที่ ตรวจสอบภาพด้านล่าง:

หุ่นยนต์ที่ประจักษ์ผสานคุณลักษณะ

จากภาพคุณสามารถเห็นข้อผิดพลาดในคอลัมน์ด้านขวาลองแก้ไขข้อผิดพลาด มันอาจช่วยคนที่มีปัญหาเดียวกัน อ่านเพิ่มเติมที่นี่


5
สุกใส ... ไม่สามารถหาคำเพื่อแสดงความขอบคุณได้
Shahzad Afridi

2
ในกรณีของฉันฉันเลื่อนลงเล็กน้อยเพื่อดูข้อผิดพลาด
CodeToLife

น่าเสียดายที่ไม่มีแท็บ "Merged Manifest" ใน Android Studio 3.5.2
FractalBob

@FractalBob ฉันกำลังใช้งาน 3.5.2 และดูแท็บ 'การรวมข้อความ' .. อาจเป็นไปได้ว่าคุณมีข้อผิดพลาดอื่น ๆ เกิดขึ้นก่อนที่จะรวมรายการเข้าด้วยกัน
sonyisda1

@ sonyisda1 คุณกำลังใช้งานระบบ Linux อยู่หรือไม่? ฉันมี Ubuntu 18.04 LTS
FractalBob

120

ลบออก <activity android:name=".MainActivity"/>จากไฟล์ mainfest ของคุณ ตามที่คุณได้นิยามไว้เป็น:

 <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

ดังนั้นไฟล์ Manifest แสดงความคลุมเครือ


31
มันแย่มากที่นี่เป็นคำตอบที่ได้รับการยอมรับเมื่อแก้ไขโค้ดของ Rowen แต่ไม่ช่วยเหลือคนอื่นอย่างสิ้นเชิง คำตอบโดย CLIFFORD จริงแสดงวิธีการ "ดูบันทึก" เป็นข้อผิดพลาดแนะนำ
Andrew Koster

มันทำงานได้ดีมากเพียงตรวจสอบและลบรายการที่ซ้ำกันในไฟล์ AndroidManifest.xml
vishwajit76

61

สำหรับฉันงานนี้ -

ค้นหาข้อผิดพลาดการผสานใน AndroidManifest.xml

ป้อนคำอธิบายรูปภาพที่นี่

คลิกที่รวมประกาศใน AndroidManifest.xml

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถดูข้อผิดพลาดในการรวมรายการในคอลัมน์ด้านขวา มันอาจช่วยแก้ปัญหานี้ได้


3
นี่คือการแก้ไขทั่วไปสำหรับปัญหานี้ สิ่งนี้จะช่วยให้คุณค้นพบเหตุผลที่แท้จริงสำหรับปัญหาใด ๆ เกี่ยวกับเรื่องนี้
JoeGalind

60

ฉันกำลังเผชิญปัญหาเดียวกันและหลังจากการวิจัยจำนวนมากพบวิธีแก้ปัญหา:

  1. เวอร์ชั่น min sdk ของคุณควรเหมือนกับโมดูลที่คุณใช้เช่นโมดูล min sdk ของคุณคือ 14 และแอป min sdk รุ่นของคุณคือ 9 ควรเป็นเหมือนกัน
  2. ถ้าเวอร์ชั่นบิวด์ของแอพและโมดูลของคุณไม่เหมือนกัน อีกครั้งควรเหมือนกัน ** โดยย่อbuild.gradleไฟล์แอปและรายการของคุณควรมีการกำหนดค่าเหมือนกัน **
  3. ไม่มีการทำซ้ำเหมือนการเพิ่มสิทธิ์แบบเดียวกันในไฟล์รายการสองครั้งกิจกรรมเดียวกันพูดถึงสองครั้ง
  4. หากคุณลบกิจกรรมใด ๆ จากโครงการของคุณให้ลบออกจากไฟล์รายการของคุณด้วย
  5. บางครั้งมันเป็นเพราะฉลาก, ไอคอน ฯลฯ แท็กของไฟล์รายการ:

ก) เพิ่มxmlns:toolsบรรทัดในแท็กรายการ

b) เพิ่มtools:replace=หรือtools:ignore=ในแท็กแอปพลิเคชัน

ตัวอย่าง:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.slinfy.ikharelimiteduk"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="1"
    android:versionName="1.0" >

  <application
      tools:replace="icon, label"
      android:label="myApp"
      android:name="com.example.MyApplication"
      android:allowBackup="true"
      android:hardwareAccelerated="false"
      android:icon="@drawable/ic_launcher"
      android:theme="@style/Theme.AppCompat" >
  </application>

</manifest>
  1. หากการอ้างอิงสองรายการไม่ใช่รุ่นเดียวกัน: คุณกำลังใช้การพึ่งพาสำหรับ appcompat v7: 26.0.0 และสำหรับ facebook com.facebook.android:facebook-android-sdk: [id4,5] facebook ใช้ cardview ของเวอร์ชัน com.android การสนับสนุน: cardview-v7: 25.3.1 และ appcompat v7: 26.0.0 ใช้ cardview ของรุ่น v7: 26.0.0 ดังนั้นจึงมีความแตกต่างในสองไลบรารีและทำให้เกิดข้อผิดพลาด

ข้อผิดพลาด: การดำเนินการล้มเหลวสำหรับงาน ': app: processDebugManifest'

การรวมที่ประจักษ์ล้มเหลว: แอตทริบิวต์ meta-data#android.support.VERSION@value ค่า = (26.0.0-alpha1) จาก [com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml: 27: 9 -38 มีอยู่ที่ [com.android.support:cardview-v7:25.3.1] AndroidManifest.xml: 24: 9-31 value = (25.3.1) คำแนะนำ: เพิ่ม 'tools: replace = "android: value"' ไปยังองค์ประกอบที่ AndroidManifest.xml: 25: 5-27: 41 เพื่อแทนที่

ดังนั้นโดยใช้ appcompat ของเวอร์ชัน 25.3.1 เราสามารถหลีกเลี่ยงข้อผิดพลาดนี้ได้

โดยการพิจารณาประเด็นข้างต้นคุณจะได้รับการกำจัดปัญหาที่น่ารำคาญนี้ คุณสามารถตรวจสอบบล็อกของฉันด้วย https://wordpress.com/post/dhingrakimmi.wordpress.com/23


1
ในกรณีของฉันมันเป็นเพราะชุดรูปแบบของโมดูลที่ฉันเพิ่มดังนั้นฉันจึงใช้เป็นเครื่องมือ: แทนที่ "ไอคอน, ป้าย, ชุดรูปแบบ"
turbandroid

ในกรณีของฉันมันเป็นเพราะธีมของโมดูลที่ฉันเพิ่มดังนั้นฉันจึงใช้เป็นเครื่องมือ: แทนที่ "ไอคอน, ป้าย, ชุดรูปแบบ" และ xmlns: tools = " schemas.android.com/tools " Thanks @ O'one
alfo888_ibg

14

นอกเหนือจากการแก้ปัญหาที่มีอยู่โปรดตรวจสอบด้วย
หากคุณตั้งไว้android:allowBackup="false"ในของคุณAndroidManifest.xmlอาจมีความขัดแย้งandroid:allowBackup="true"ในการอ้างอิงอื่น ๆ

วิธีการแก้ปัญหา
ที่แนะนำโดย @CLIFFORD PY สลับไปในของคุณMerged Manifest AndroidManifest.xmlAndroid สตูดิโอจะแนะนำให้เพิ่มtools:replace="android:allowBackup"ในในของคุณ<application />AndroidManifest.xml


12

ฉันกำลังประสบปัญหาเดียวกันและฉันเพิ่งเพิ่มหนึ่งบรรทัดใน manifest.xml ของฉันและมันใช้งานได้สำหรับฉัน

tools:replace="android:allowBackup,icon,theme,label,name"> 

เพิ่มบรรทัดนี้ภายใต้

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:screenOrientation="portrait"
    android:supportsRtl="true"
    android:theme="@style/AppThemecustom"
    tools:replace="android:allowBackup,icon,theme,label">

หวังว่ามันจะช่วย


ขอบคุณมาก! ฉันกำลังเผชิญกับปัญหานี้ในสถานการณ์ที่เฉพาะเจาะจงมากที่เกิดจากหน้าสนับสนุน Zendesk เมื่อคลิกที่ "แนบไฟล์" พยายามคำตอบมากมายจากคำถามที่แตกต่างและมีเพียงความคิดเห็นของคุณเท่านั้น!
นาตาลี

@ นาตาลีฉันดีใจที่มันช่วย :)
Pre_hacker

11

เพียงเพิ่มรหัสด้านล่างในแท็กแอปพลิเคชันรายการของคุณ ...

<application
        tools:node="replace">

ขอบคุณมาก
tej shah

8

ในกรณีของฉันมันแสดงข้อผิดพลาดเนื่องจากมี<uses-permission>องค์ประกอบที่ซ้ำซ้อน ดังนั้นโปรดตรวจสอบAndroidManifest.xmlไฟล์ของคุณเหมือนกัน

Android Studio เวอร์ชัน 3.0.1

ระบบปฏิบัติการคือ Windows 7

นี่คือภาพหน้าจอสำหรับการอ้างอิง

สกรีนช็อตซึ่งแสดงความซ้ำซ้อนในไฟล์ Manifest


ขณะนี้โพสต์ก่อนคำตอบของ @ CLIFFORD-PY การค้นหาข้อผิดพลาดในการรวมผ่านมุมมอง Merged Manifest จะพบข้อผิดพลาดซ้ำซ้อนนี้โดยเฉพาะ
sonyisda1


7

มักจะเกิดขึ้นเมื่อคุณมีข้อผิดพลาดในรายการของคุณเปิด AndroidManifest.xml คลิกที่แท็บรายการที่ผสานข้อผิดพลาดสามารถมองเห็นได้ที่นั่นนอกจากนี้ยังมีคำแนะนำที่กล่าวถึงเมื่อฉันมีปัญหาคล้ายกันในขณะที่นำเข้า com.google.android.gms .maps.model.LatLng แนะนำให้ฉันรวมเครื่องมือ: overrideLibrary = "com.google.android.gms.maps" ในแท็กแอปพลิเคชันและบิลด์ก็สำเร็จ


3

กรณีของฉันฉันได้แก้ไขโดย

build.gradle (Module: แอป)

defaultConfig {
----------
multiDexEnabled true
}
dependencies {
    ...........
    implementation 'com.google.android.gms:play-services-gcm:11.0.2'
    implementation 'com.onesignal:OneSignal:3.+@aar'
    }

คำตอบนี้เกี่ยวข้องกับการแจ้งเตือนแบบพุช OnSignal


2
  1. ในAndroidManifest.xml:

    • ที่แอปพลิเคชันให้เพิ่มtools:replace="android:icon, android:themeและ
    • ที่รูต Manifest ให้เพิ่ม xmlns:tools="http://schemas.android.com/tools
  2. ในbuild.gradle:

    • ที่รากให้เพิ่ม useOldManifestMerger true

2

เวอร์ชัน minium sdk ควรเหมือนกับโมดูล / lib ที่คุณใช้ตัวอย่างเช่น: โมดูล min sdk ของคุณคือ 26 และแอปของคุณ min sdk เวอร์ชันคือ 21 ควรเหมือนกัน


1

ในช่วงไม่กี่วันที่ผ่านมาฉันก็ประสบปัญหาเดียวกัน แต่หลังจากนั้นมีงานวิจัยมากมายที่ฉันพบวิธีแก้ปัญหา
เพื่อที่จะแก้ปัญหานี้สิ่งที่คุณต้องทำคือ
1. ตรวจสอบว่าโครงการของคุณbuild.gradleไฟล์และโมดูลbuild.gradleไฟล์ประกอบด้วยรุ่นเดียวกันของการอ้างอิงทั้งหมด
2. ตรวจสอบให้แน่ใจว่าโครงการของคุณcompileSdkVersion , buildToolsVersion , minSdkVersionและtargetSdkVersionตรงกับที่อยู่ในโมดูลหรือไลบรารีที่คุณได้เพิ่มเข้าไปในโครงการ

compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
    applicationId "com.example.appname"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 22
    versionName "2.0.3"

}

หวังว่านี่จะช่วยได้


1

ถ้าหลังจากคุณเพิ่มโมดูลห้องสมุด Androidและคุณได้รับข้อผิดพลาดนี้
คุณสามารถแก้ไขได้โดยง่ายลบออกandroid:label="@string/app_name"จากโมดูลห้องสมุด AndroidAndroidManifest.xmlของคุณ


1

เปิดคอนโซลการไล่ระดับสีของคุณจากนั้นคุณจะเห็นการไล่ระดับสีแนะนำให้คุณเพิ่มบรรทัดเฉพาะ (เช่น: tools: replace = "android: allowBackup" หรือเครื่องมือ: replace = "android: label" ฯลฯ ) เพิ่มบรรทัดนั้นลงในไฟล์รายการของคุณภายใต้แท็กและซิงค์ gradle นั่นคือมัน


1

ในกรณีของฉันมันเกิดขึ้นเพราะปล่อยให้ตัวกรองเจตนาที่ว่างเปล่าอยู่ในแท็กกิจกรรม

    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

            <intent-filter>

            </intent-filter>

    </activity> 

ดังนั้นเพียงแค่ลบพวกเขาแก้ไขปัญหา

    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
    </activity> 

0

ในฐานะที่เป็น newbie ไปยัง Android Studio ในกรณีของฉันฉันได้ย้ายโครงการที่มีอยู่จาก Eclipse ไปยัง Android Studio และพบว่ามีคำจำกัดความที่ซ้ำกันของกิจกรรมภายใน Manifest.xml ของฉันที่ไม่ได้รับโดย Eclipse แสดงเป็น ข้อผิดพลาด Gradle

ฉันพบสิ่งนี้โดยไปที่ Gradle Console (ด้านล่างขวาของหน้าจอ)


0

เกิดขึ้นกับฉันสองครั้งเมื่อฉันหักเห (เปลี่ยนชื่อด้วย SHIFT + F6) ชื่อของเขตข้อมูลในไฟล์ของเราและมันขอให้คุณเปลี่ยนทุกที่และเราไม่สนใจเปลี่ยนชื่อทุกที่ ตัวอย่างเช่นหากคุณมีชื่อตัวแปร "id" ในคลาส Java ของคุณและคุณเปลี่ยนชื่อด้วย SHIFT + F6 หากคุณไม่ใส่ใจกับกล่องโต้ตอบถัดไปซึ่งจะถามคุณทุกที่มันจะเปลี่ยน ID และคุณติ๊กเลือกทั้งหมดมันจะเปลี่ยน id ทั้งหมดในไฟล์เลย์เอาต์ของคุณจากค่าใหม่


0

นี่เป็นข้อผิดพลาดที่ง่ายมากเกิดขึ้นเฉพาะเมื่อคุณกำหนดการเรียกกิจกรรมสองครั้งในไฟล์ mainifest.xml ตัวอย่างเช่น

<activity android:name="com.futuretech.mpboardexam.Game" ></activity>

//and launcher also------like that



//solution:use only one 

0

วางสิ่งนี้ไว้ที่ส่วนท้ายของโมดูลแอพของคุณ build.gradle:

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '25.3.0'
        }
    }
}}

จากนี้



0

เพียงแค่ย้ายไปยัง Androidx ดังที่แสดงไว้ด้านบนแล้วตั้งค่ารุ่น sdk ขั้นต่ำเป็น 26 ... โดยไม่ต้องสงสัยเลยว่ามันทำงานได้อย่างสมบูรณ์แบบ


0

แฮ็คต่อไปนี้ใช้งานได้:

  1. เพิ่มxmlns:tools="http://schemas.android.com/tools"บรรทัดในแท็กรายการ
  2. เพิ่ม tools:replace="android:icon,android:theme,android:allowBackup,label,name" ในแท็กแอปพลิเคชัน


0

ในกรณีของฉันฉันใช้คำอธิบายประกอบจากห้องสมุด jetbrains ฉันลบคำอธิบายประกอบและการอ้างอิงเหล่านั้นออกและใช้ได้ดี

ดังนั้นโปรดตรวจสอบห้องสมุดในรหัส Android และการอ้างอิงอย่างรอบคอบ


0

หากคุณใช้หลายmanifestPlaceholderรายการในbuild.gradleไฟล์คุณคุณจะต้องเพิ่มรายการเหล่านั้นเป็นองค์ประกอบอาร์เรย์แทนรายการแยกต่างหาก

ตัวอย่างเช่นสิ่งนี้จะทำให้เกิดข้อผิดพลาดในการสร้างหรือรวบรวมข้อผิดพลาด: "java.lang.RuntimeException: การรวมกันอย่างชัดแจ้งล้มเหลวพร้อมข้อผิดพลาดหลายอย่าง":

android {
    ...
    defaultConfig {
        manifestPlaceholders = [myKey1: "myValue1"]
        manifestPlaceholders = [myKey2: "myValue2"] // Error!
    }
}

สิ่งนี้จะแก้ไขข้อผิดพลาด:

android {
    ...
    defaultConfig {
        manifestPlaceholders = [myKey1: "myValue1", myKey2: "myValue2"]
    }
}

0

นี่เป็นเพราะคุณกำลังใช้ไลบรารีวัสดุใหม่กับไลบรารี่สนับสนุนดั้งเดิม

คุณต้องโยกย้ายandroid.supportไปเพื่อที่จะใช้งานandroidxcom.google.android.material

หากคุณใช้ android studio v 3.2 ขึ้นไปเพียง

ไปที่ refactor ---> ย้ายไปยัง ANDROID X

ทำการสำรองข้อมูลของโครงการของคุณ


0

ฉันใช้FirebaseUI Libraryพร้อมกับFacebook SDK Libraryซึ่งทำให้ฉันมีปัญหา

implementation 'com.firebaseui:firebase-ui-database:0.4.4'
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'

และจาก [ที่นี่] [1] ฉันได้กำจัดปัญหานี้

ด้วยไลบรารีlatest updateของFirebaseUIเวอร์ชั่นก่อนหน้าของ Facebook SDK ก็เป็นส่วนหนึ่งเช่นกัน

หากคุณใช้ทั้งสองไลบรารีโปรดลบไลบรารี Facebook SDKออก

https://github.com/firebase/FirebaseUI-Android/issues/230

UPDATE

จำเป็นต้องมีไฟล์เพื่อใช้หรือแทนการเพิ่มการอ้างอิงไปยังแอปจากAndroid Studio 3.0และรุ่นที่ใหม่กว่าapp.gradleimplementationapicompile


0

หลังจากเห็นคำตอบของ CLIFFORD เพื่อดูข้อผิดพลาดสิ่งที่ช่วยฉันในการแก้ไขปัญหานี้คือการเปลี่ยนชื่อ 'android: namex' เป็น 'android: name' ในแท็กการกระทำที่มีเจตนากรอง ในกรณีที่วิธีการแก้ปัญหาเดียวกันช่วยคนอื่น

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.