Android 재질 및 appcompat 매니페스트 합병 실패


223

나는 다음 학년이 있습니다

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.android.material:material:1.0.0-rc01'
}

그러나 앱을 만들고 싶을 때 다음 로그를 얻습니다.

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

승인! 매니페스트로 이동하여 수행하십시오.

<?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="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

</manifest>

그런 다음 Logcat 에이 오류가 발생합니다.

Manifest merger failed with multiple errors, see logs that I have Linked with it

2
이 줄을 제거하십시오 : 구현 'com.android.support:appcompat-v7:28.0.0-rc01'및 구현 'com.android.support.constraint을 : 제약 - 레이아웃 : 1.1.2'
vcapra1

2
머티리얼 패키지는 모두 안드로이드 디자인에 번들로 제공되는 것 같습니다.
Marcos Vasconcelos

material.io/design/components/app-bars-bottom.html 이 필요합니다 . 이것은 안드로이드 디자인에 있습니까?
Евгений Усов

이것도 확인할 수 있습니다 : stackoverflow.com/a/54825603/1318946
Pratik Butani

새로운 Android Studio에는 응용 프로그램을 androidX로 원활하게 마이그레이션하는 기능이 있습니다. 아래 링크를 따르십시오. github.com/material-components/material-components-android/…
라비 Jaggarapu

답변:


15

종속성의 첫 번째 및 마지막 줄에서 "rc01"을 "alpha1"로 변경하십시오.


OS 독립적 경로 'META-INF / androidx.core_core.version
Aliton Oliveira

40
구현 'com.android.support:appcompat-v7:28.0.0'으로 작성된 "rc01"이 없습니다. 여전히 문제가 발생합니다. 해결책을 제안하십시오.
avani kothari 2016

10
이 답변은 질문에 대한 의견이었습니다.
Ananth

459

나는 비슷한 문제가 있었다. gradle.properties파일에 두 줄을 추가했습니다 .

android.useAndroidX=true
android.enableJetifier=true

이 두 줄은 Google 파일과 타사 종속성 간의 종속성 충돌을 자동으로 해결했습니다. 다음 링크를 따르십시오 : https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Frank Fang

6
추가 된 후 다음과 같은 오류가 발생합니다 .`` * 무엇이 잘못 되었습니까 : 작업 ': react-native-camera : compileGeneralDebugJavaWithJavac'에 대한 실행이 실패했습니다. > 컴파일이 실패했습니다. 자세한 내용은 컴파일러 오류 출력을 참조하십시오. * 시도 : 스택 추적을 얻으려면 --stacktrace 옵션으로 실행하십시오. 더 많은 로그 출력을 얻으려면 --info 또는 --debug 옵션으로 실행하십시오. 통찰력을 얻으려면 --scan으로 실행하십시오. ```
Dileepa Chandima 5


9
이것이 정답입니다. 이것은 문제를 해결했다.
VishalKale

2
"하지만 'gradles.properties 파일'이 보이지 않습니다."!. 예, 따라서 studio project의 앱 루트 폴더에서 해당 파일 (확장자 없음)을 만들고 해당 행을 추가합니다.
user1010160

145

Kotlin-KTX 라이브러리를 프로젝트에 추가하려고 할 때도 같은 오류가 발생했습니다.

AndroidX 마이그레이션을 시도하고 문제가 해결되었습니다!

리팩터링 / AndroidX로 마이그레이션


1
이것은 작동하지만 생성하는 일부 import 문은 오래된 패키지 이름을 사용합니다. androidx.*IDE가 수정으로 제안한 패키지 이름 을 사용하여 여러 가지를 수정해야했습니다 .
Andrew Koster 2018 년

1
@Mete이 답변은 내 생명을 구했습니다. 맥주 사 줄래?
girish_vr

@girish_vr 제안을 주셔서 감사합니다 :) 그것이 효과가있어서 기쁩니다.
Mete

build.gradle 파일에서 "support-v4"라이브러리의 최신 릴리스를 가져 오기 때문에이 문제가 발생했습니다. 내 gradle 파일 내에서 특정 버전의 라이브러리를 참조했다면 처음에는이 문제가 발생하지 않았을 것입니다. 또한 조금 더 연구 한 결과 Google에서 AndroidX 라이브러리로 전환하는 것이 좋습니다. 그래서 나는 총알을 물기로 결정했습니다. 다행스럽게도 업그레이드 후 모든 문제가 해결되었습니다 ... 재해를 피하고 LESSON은 gradle 참조에 대해 배웠습니다.
BluJ IT

104

실패 이유

일부인 재료 라이브러리를 사용하고 있습니다. AndroidX의 . AndroidX를 모르는 경우이 답변을 참조하십시오 .

하나의 앱은 AndroidX 또는 이전 Android 지원 라이브러리를 사용해야합니다. 그래서이 문제에 직면했습니다.

예를 들어-

당신의 gradle에서, 당신은 사용하고 있습니다

  • com.android.support:appcompat-v7 (이전 부분 --Android 지원 라이브러리-)
  • com.google.android.material:material(AndroidX의 일부) (AndroidX 빌드 아티팩트 com.android.support:design)

해결책

따라서 해결책은 AndroidX 또는 이전 지원 라이브러리를 사용하는 것입니다. Android는 28.0.0 이후 버전의 지원 라이브러리를 업데이트하지 않으므로 AndroidX를 사용하는 것이 좋습니다. 출시 노트 참조지원 라이브러리의 를 .

AndroidX로 마이그레이션하면됩니다.다음 은 AndroidX로 마이그레이션하는 자세한 답변입니다. 나는 그 대답에서 필요한 단계를 여기에두고 있습니다.

마이그레이션하기 전에 프로젝트를 백업하는 것이 좋습니다.

기존 프로젝트

  • Android Studio> 리 팩터 메뉴> AndroidX로 마이그레이션 ...
  • 하단에 Refractor 창이 분석되고 열립니다. 수행 할 변경을 승인하십시오.

영상

새 프로젝트

이 깃발을 당신의 gradle.properties

android.enableJetifier=true
android.useAndroidX=true

동일한 AndroidX 패키지에 대한 @Library 맵핑을 확인하십시오 .

AndroidX로 마이그레이션 @ 공식 페이지 확인

Jetifier 란 무엇입니까?


그 후에도 여전히 오류가 발생했지만이 답변이 도움이되었습니다. stackoverflow.com/a/49525685/1972372
Big_Chair

3
"AndroidX로 마이그레이션"을 클릭 한 후 왼쪽 하단의 "리팩터링"을 클릭하십시오
SupaHam

88

내 경우에는 이것이 완벽하게 작동합니다. 매니페스트 파일 안에 두 줄 코드 아래를 추가했습니다.

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

신용은 이 답변에 간다 .

매니페스트 파일 예


4
나중에 앱에 문제가 있는지 모르겠지만 효과가있었습니다!
Aliton Oliveira 2016 년

4
예 문제가 있습니다. OS 독립 경로 'META-INF / androidx.core_core.version'에서 둘 이상의 파일을 찾았습니다
Aliton Oliveira

3
그런 다음 도구가 응용 프로그램 태그에 바인딩되어 있지 않다는 오류가 발생합니다.
Travis Delly 2016 년

전체 로그 캣을 게시 할 수 있습니까?
Muhaiminur Rahman 2016


29

간단한 솔루션-AndroidX로 마이그레이션

에서 gradle.properties두 스크립트 아래에 추가하십시오.

android.useAndroidX=true
android.enableJetifier=true

이유는 무엇입니까 ↓

AndroidX의 모든 패키지는 문자열 androidx로 시작하는 일관된 네임 스페이스에 있습니다. 지원 라이브러리 패키지는 해당 androidx. * 패키지에 매핑되었습니다. 모든 이전 클래스와 빌드 아티팩트를 새 클래스로 완전히 맵핑하려면 패키지 리팩토링 페이지를 참조하십시오.

참조하시기 바랍니다 패키지 리팩토링 페이지를


내 프로젝트에는 gradle.properties 파일이 없습니다. (원래 일식에서 생성되었고 나중에 안드로이드 스튜디오로 옮겼습니다)
Sujith Manjavana

아 ... 내가 그런 상황에 직면하지 않았다, 나는 당신이 도움이 될 수도 실 아래에있는 stackoverflow.com/a/37389861/6917362 하시기 바랍니다 시도하고 의견을
EJ Chathuranga

해당 파일이 없으면 기본 build.gradle 근처에 해당 파일을 만들고 프로젝트를 동기화하십시오.
Fedir Tsapana

13

android.support 의존성을 제거하십시오.

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

자재 지침에서 인용

새로운 androidx 및 com.google.android.material 패키지로 아직 전환하지 않으려면 com.android.support:design:28.0.0-alpha3 종속을 통해 Material Components를 사용할 수 있습니다.

참고 : 앱에서 com.android.support와 com.google.android.dependencies를 동시에 사용해서는 안됩니다.

이 의존성을 제거하면 정상적으로 작동합니다.

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

여기에 완전한 의존성 예제가 있습니다

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       testImplementation 'junit:junit:4.12'
       androidTestImplementation 'com.android.support.test:runner:1.0.2'
       androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
   }

1
이것이 가장 정확한 답변입니다.
Fran Marzoa

1
@FranMarzoa 아닙니다. Compat 라이브러리를 다른 종속성에서 가져 오면 어떻게됩니까?
m0skit0 2016 년

1
@ m0skit0 여기에 다른 질문을 게시해야한다고 생각합니다 ...;)
Fran Marzoa


12

이 이미지를보고 Android Android에서이 행을 추가하십시오.

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

여기에 이미지 설명을 입력하십시오


어떤 문자열을 의미합니까?
Kishore Kumar

@KishoreKumar appName과 같은 문자열 이름을 추가 할 수 있습니다.
Prashant Arvind

정확하게, whateverString은 AppComponentFactory를 확장하는 전체 클래스 이름이어야합니다. 예를 들어, 사용자 정의 클래스 com.xxx.MyFactory는 AppComponentFactory
jiashie

11

이 행을 AndroidManifest.xml 파일에 추가하십시오.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
도구를 추가 할 때 빨간색으로 표시됩니다. 추가해야 할 다른 것들이 있습니까?
natsumiyu

더 이상 추가 할 것이 없습니다. 그 이유 중 하나는 ur gradle 버전이 일치하지 않기 때문입니다. AndroidManifest.xml 파일 코드를 보여줄 수 있습니까?
Ajay

androidx로 마이그레이션을 시도했지만 ': app : compileDebugJavaWithJavac'작업에 대한 실행이 계속 실패했습니다. > 컴파일이 실패했습니다. 자세한 내용은 컴파일러 오류 출력을 참조하십시오.
natsumiyu

여기 내 안드로이드 매니페스트 <application android : allowBackup = "true"android : icon = "@ mipmap / ic_launcher"android : label = "@ string / app_name"android : roundIcon = "@ mipmap / ic_launcher"android : usesCleartextTraffic = "true "android : supportsRtl ="true "android : theme ="@ style / AppTheme "도구 : replace ="android : appComponentFactory "android : appComponentFactory ="@ string / texthere ">
natsumiyu

1
훌륭한 솔루션, 내 시간을 절약했습니다.
Umair Iqbal

9

이 두 줄의 코드를 매니페스트 파일에 추가하십시오.

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

8

다음과 같이하세요:

  • 리팩토링하고 클릭하여 AndroidX로 마이그레이션
  • 리팩토링 수행을 클릭하십시오.

이것은 전체 리팩터링을 수행하지 않을 것입니다 :(
Mohsin


6

이 문제는 주로 오래된 종속성에서 발생했습니다 .

두 가지 해결책이 있습니다.

첫 번째:

모든 업데이트 old dependencies클래스 경로 에서 Project level gradle파일을.

classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'

두번째 것:

프로젝트 Migrate to AndroidX

Android Studio 메뉴에서-> Refanctor-> Migrate to AndroidX

고맙습니다.이 답변으로 도움을 받으면 알려주십시오.


6

마지막으로 android/build.gradle파일에 두 줄을 추가하여 빠르고 쉬운 해결책을 찾았습니다 .

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

이 100 % 올바른 것을 따르십시오.


1
이것을 어디에 추가합니까?
트래비스 델리

android / build.gradle 파일에 이것을 추가하십시오
Manoj Alwis

2
@ManojAlwis build.gradle 파일의 어느 섹션에 이것을 넣어야합니까?
Keval Langalia

@KevalLangalia,이 두 줄을 android-> build.gradle 파일에 추가하십시오. 예 : buildscript {ext {buildToolsVersion = "28.0.3"minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0"googlePlayServicesVersion = "16. +"firebaseVersion = "17.3.4"}
Manoj Alwis

1
정말 도움이되었습니다 ... 감사합니다
Vasudev Vyas

6

라이브러리 버전 호환성에 관한 모든 것

나는 2 시간 동안이 이상한 버그에 직면했다. 이 단계를 수행 하여이 오류를 해결했습니다.

build.gradle 종속성을

  implementation 'com.google.android.gms:play-services-maps:17.0.0'

  implementation 'com.google.android.gms:play-services-maps:15.0.0'

1
솔직히 내가 같은를하고 난 였는지를 병합 한 후 라이브러리 버전 호환성에 대한 그 모든 것 같아요 그래서, 일
밀로스

6

androidx를 사용하지 않으려는 경우에만

그래서 내 경우에는 androidx를 사용하는 라이브러리를 사용하고 있지만 androidx를 사용하지 않으므로 해당 라이브러리 버전을 다운 그레이드하면 문제가 해결되었습니다.

나의 경우에는:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

위에서 언급 한 라이브러리는 문제 13. +를 자동으로 androidx를 사용하는 새로운 버전의 라이브러리를 얻습니다. 그래서 라이브러리 버전을 다음으로 다운 그레이드했습니다.

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'

그리고 문제가 해결되었습니다.


6
  1. 리팩터링-> 마이그레이션-> Android X로 마이그레이션으로 이동하십시오.

  2. 이것을 gradle.properties파일에 추가 하십시오 :

    android.enableJetifier=true
    android.useAndroidX=true

그리고 동기화를 수행하십시오.


지금 상황이 어떤지 설명해 주시겠습니까?
Girish BR

내가 물려받은 프로젝트는 반년이되었습니다. Google이 추진하고있는 새로운 Fabric / Firebase 분석을 구현하려고했습니다. 그리고 그 새로운 라이브러리는 androidx 호환성 라이브러리를 사용하고 있으며 내 프로젝트는 AppCompat을 사용합니다. 이제, 나는 수많은 의존성 업데이트와 것들을 처리해야했습니다. 중단 된 다음 이러한 명령을 포함하여 다양한 작업을 시도했는데 새로운 Firebase 기능으로 인해 필요합니다. 이 기능을 켜면 수많은 컴파일러 오류가 발생합니다. 그 문제를 해결했지만 이제는 ui xml 파일에서 오류가 발생했습니다. 그래서 모든 것을 버리고 이전 버전으로 시도해야합니다.
Martin Berger

클래스 네임 스페이스를 androidx로 수동으로 한 시간 이상 수정하면 이제 작동하는 것 같습니다. 문제는 컴파일러가 XML에서 예를 들어 "android.support.v7.widget.AppCompatSpinner"가 "androidx.appcompat.widget.AppCompatSpinner"여야 함을 감지 할 수 없다는 것입니다. 이 문서는 유용했다 : developer.android.com/jetpack/androidx/migrate
마틴 버거에게

지금 작동하고 있기를 바랍니다. 문제가 발생하면 알려주십시오.
Girish BR

4

새 프로젝트를 작성하고 build.gradle 파일을 비교하고 모두 대체하십시오.

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

그런 새로운 프로젝트에서와 같은 다른 의존성

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'androidx.core:core-ktx:1.0.0-alpha3'

그런 다음 kotlin 파일에서 androidx를 사용하도록 가져 오기를 수정했습니다.


어떤 이유로 o androidx를 사용하고 싶지 않습니다.
shaby

4

상단 메뉴에서 "리 팩터"옵션으로 이동했습니다.

그런 다음 "AndroidX로 마이그레이션"을 선택하십시오.

프로젝트를 zip 파일로 저장합니다.

문제가 발생하지 않도록 Gradle뿐만 아니라 Android Studio를 업데이트하십시오.


4

1. app / build.gradle 끝에 다음 코드를 추가했습니다.

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }

2. SDK 및 도구 버전을 28로 수정했습니다.

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3. AndroidManifest.xml 파일에서 두 줄을 추가해야합니다.

<application
    android:name=".YourApplication"
    android:appComponentFactory="AnyStrings"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

아니면 간단히

  • 리 팩터로 이동하십시오 (스튜디오-> 메뉴-> 리 팩터)
  • AndroidX로 마이그레이션을 클릭하십시오. 작동 중
  • 작동 중입니다.

2
  • 리 팩터로 이동 ( 이미지 )
  • AndroidX로 마이그레이션을 클릭하십시오. 작동 중
  • 작동 중입니다.

1
솔루션에 대한 링크는 환영하지만 답변없이 유용한 답변을 얻으십시오 . 링크 주위에 컨텍스트를 추가 하여 동료 사용자가 그 이유와 그 이유를 파악한 다음 페이지의 가장 관련성이 높은 부분을 인용하십시오. 대상 페이지를 사용할 수없는 경우 다시 연결 링크에 불과한 답변은 삭제 될 수 있습니다.
Matthew

2

AndroidX로 마이그레이션하지 않으려면 다음 단계를 따르십시오.

  1. 터미널 유형 gradlew app : dependencies
  2. 창에 종속성이 표시되면 Ctrl + f를 누르고 androidX를 입력하십시오.
  3. androidx lib를 내부적으로 사용하는 모든 종속성을 찾을 수 있습니다. 내부에서 androidX lib를 더 이상 사용하지 않도록하기 위해 다운 그레이드하거나 대안을 사용해야 할 수도 있습니다.

1

나는 3 일 동안 같은 문제를 겪었다.

그것은 안드로이드가 Kotlin 또는 AndroidX를 사용하기를 원하는 것처럼, 그들은 안드로이드를 버리고 있습니다.

그러나 이것이 내가 해결 한 방법입니다.

  • 프로젝트를 AndroidX로 마이그레이션했습니다. 이 문제와 관련된 오류는 발생하지 않으며 파일을 각각 업데이트합니다. 응용 프로그램에서 메소드, 클래스 또는 변수 이름을 변경할 필요가 없습니다.

NB : 최신 안정 버전의 Android Studio 3.4.1에서 최신 라이브러리 (build.grudle 파일)를 사용해야합니다.


1

나는 이것이 정답인지 모르겠지만 그것은 나를 위해 일했다.

그리드 래퍼 속성 증가

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

에 Gridle을 구축

    classpath 'com.android.tools.build:gradle:3.4.2'

버전으로 인해 오류가 표시됩니다.


문자열은 androidx.core.app.AppComponentFactory 여야한다고 생각합니다. 임의의 문자열로 인해 임의의 시간이 발생할 수 있습니다.
seyedrezafar

0

우선 매니페스트 태그 에이 줄을 추가하십시오

xmlns:tools="https://schemas.android.com/tools"

그런 다음 Android 스튜디오에서 제안 된 도구를 대체하는 도구 추가


0

build.gradle (모듈 : app)의 proguardFile을 다음과 같이 변경하십시오.

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

대신에

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

이것은 나를 위해 일했다


0

이 문제를 해결하려면 android/build.gradle루트 프로젝트에서 ext 변수의 버전을 명시 적으로 정의하는 것이 좋습니다.

ext {
    googlePlayServicesVersion = "16.1.0" // default: "+"
    firebaseVersion = "15.0.2" // default: "+"

    // Other settings
    compileSdkVersion = <Your compile SDK version> // default: 23
    buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
    targetSdkVersion = <Your target SDK version> // default: 23
    supportLibVersion = "<Your support lib version>" // default: 23.1.1
}

참조 https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941


0

나는 또한 같은 문제에 직면하고 있습니다. 안드로이드 스튜디오의 경우 Android Gradle 플러그인 버전 3.3.2를 변경하고 Gradle 버전은 5.1.1입니다.


0

내 경우에는 매니페스트 파일에 추가됩니다.

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

물론 응용 프로그램 태그, 작동합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.