programing

Android Material과 Appcat Manifest 병합 실패

closeapi 2023. 10. 23. 21:50
반응형

Android Material과 Appcat Manifest 병합 실패

나는 다음 학년이 있습니다.

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

저도 비슷한 문제가 있었습니다.에 두 줄을 추가했습니다.gradle.properties일:

android.useAndroidX=true
android.enableJetifier=true

이 두 줄은 구글의 파일과 제3자 종속성 사이의 저의 종속성 갈등을 자동으로 해결해 주었습니다.다음은 https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project 링크입니다.

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

AndroidX 마이그레이션을 시도해 보았는데 문제가 해결되었습니다.

Refactor/Migrate to AndroidX

불합격사유

AndroidX의 일부인 자료 라이브러리를 사용하고 있습니다.안드로이드X를 모르신다면 이 답변을 참고해주시기 바랍니다.

하나의 앱은 Android X 또는 오래된 Android Support 라이브러리를 사용해야 합니다.그래서 이 문제에 직면한 겁니다.

예를 들면 -

그래들에서, 당신은 사용하고 있습니다.

  • com.android.support:appcompat-v7(오래된 --Android 지원 라이브러리의 일부--)
  • com.google.android.material:material X 의 (Android X부트)(Android X의:com.android.support:design)

해결책

따라서 해결책은 Android X 또는 오래된 지원 라이브러리를 사용하는 것입니다.안드로이드는 버전 28.0.0 이후에는 지원 라이브러리를 업데이트하지 않기 때문에 안드로이드 X를 사용하는 것을 권장합니다.지원 라이브러리의 릴리스 정보를 참조하십시오.

Android X로 이동만 하면 됩니다.안드로이드X로 마이그레이션하기 위한 자세한 답변은 다음과 같습니다.저는 그 답변에서 필요한 조치들을 여기에 두고 있습니다.

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

기존프로젝트

  • Android Studio > Refactor 메뉴 > Android X로 마이그레이션...
  • 분석하고 아래쪽의 굴절기 창을 엽니다.변경할 내용을 승인합니다.

image

신규프로젝트

이 깃발들을 당신의 것에 넣습니다.gradle.properties

android.enableJetifier=true
android.useAndroidX=true

동일한 AndroidX 패키지에 대해 @Library 매핑을 확인합니다.

Android X로 마이그레이션의 공식 페이지 @확인

제트화기란?

제 경우엔 완벽하게 작동하고 있습니다.매니페스트 파일 안에 아래 두 줄 코드를 추가했습니다.

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

신용은 이 답변에 적용됩니다.

Manifest file Example

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

gradle.properties, 아래에 두개의 스크립트를 추가합니다.

android.useAndroidX=true
android.enableJetifier=true

이유가 뭐였더라 ↓

AndroidX의 모든 패키지는 Androidx 문자열로 시작하는 일관된 네임스페이스에 저장됩니다.지원 라이브러리 패키지가 해당 Androidx에 매핑되었습니다.* 꾸러미들모든 이전 클래스와 빌드 아티팩트를 새 클래스에 전체 매핑하려면 Package Refactoring 페이지를 참조하십시오.

패키지 리팩토링 페이지를 참조하십시오.

그냥 종속성 안의 첫번째 줄과 마지막 줄의 "rc01"을 "alpha1"로 변경하면 됩니다. 이것은 저에게 효과가 있습니다.

안드로이드만 제거하면 됩니다.부양가족

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

자료 지침서의 인용

아직 새로운 Androidx 및 com.google.android.material 패키지로 전환하고 싶지 않다면 com.android를 통해 Material Components를 사용할 수 있습니다.지원:디자인:28.0.0-alpha3 의존성.

참고: comandroid는 사용하지 마십시오.지원 및 com.google.android.dependency를 앱에서 동시에 지원합니다.

이 종속성을 제거하는 것만으로도 잘 작동합니다.

    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'
   }

Android P 이후 지원 라이브러리가 Android X로 이동했습니다.

이 페이지에서 립스 리팩터를 해주세요.

https://developer.android.com/topic/libraries/support-library/refactor

Android Manifest.xml에서 이 이미지를 보고 이 줄을 추가

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

enter image description here

  1. Refactor->Migrate->Android X로 마이그레이션으로 이동하십시오.

  2. 이것을 당신의 것에 추가해 주세요.gradle.properties일:

    android.enableJetifier=true
    android.useAndroidX=true
    

Sync.

AndroidManifest.xml 파일 안에 줄을 추가합니다.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

이 두 줄의 코드를 매니페스트 파일에 추가하기만 하면 됩니다.

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

마이그레이션 대상androidX그것이 기존 프로젝트라면.새 프로젝트인 경우 이 두 개의 플래그를 다음에 추가합니다.Gradle.propeties

android.enableJetifier=true  
android.useAndroidX=true

자세한 단계는 https://developer.android.com/jetpack/androidx 을 참조하거나 안드로이드 X란?

다음 단계를 따릅니다.

  • Refactor(리팩터)로 이동하고 AndroidX로 마이그레이션을 클릭합니다.
  • 작업 재팩터를 누릅니다.

Androidx를 사용하지 않으려는 경우에만 해당

그래서 저의 경우 안드로이드x를 사용하던 라이브러리를 사용하고 있는데 안드로이드x를 사용하지 않아서 해당 라이브러리 버전을 다운그레이드 했을 때 문제가 해결되었습니다.

내 경우:

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

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

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

그리고 문제는 해결됐습니다.

이 문제는 주로 오래된 의존 관계에서 발생했습니다.

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

첫번째:

모두 업데이트old dependenciesClassPaths fromProject 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

감사합니다, 혹시 이 답변에 도움이 되는 분이 있으면 알려주세요.

마침내 두 줄을 추가함으로써 빠르고 쉬운 해결책을 찾았습니다.android/build.gradle파일.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

이것을 100% 정확하게 따라주시기 바랍니다.

이것은 라이브러리 버전 호환성에 관한 모든 것입니다.

2시간 동안 이 이상한 벌레를 마주하고 있었습니다.다음 단계를 수행하여 이 오류를 해결했습니다.

당신의 빌드.그레이들 의존성을 에 바꿉니다.

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

로.

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

제가 한 일은 맨 위 메뉴의 "Refactor" 옵션으로 이동한 것뿐입니다.

그런 다음 "안드로이드 X로 마이그레이션"을 선택합니다.

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

문제가 발생하지 않도록 Gradle 뿐만 아니라 Android Studio도 업데이트해 주시기 바랍니다.

새 프로젝트를 만들고 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'

그리고 코틀린 파일에 안드로이드x를 사용하도록 수입을 수정했습니다.

AndroidX로 마이그레이션하지 않으려는 경우 아래 단계를 따릅니다.

  1. in terminal type gradlew app:의존성
  2. 의존 관계가 창에 표시되면 Ctrl+f를 누르고 AndroidX를 입력합니다.
  3. 내부적으로 안드로이드 x lib을 사용하는 모든 종속성을 발견하게 될 것입니다. 더 이상 내부적으로 안드로이드 x lib을 사용하지 않도록 하려면 이를 다운그레이드하거나 대체 사용해야 할 수도 있습니다.

1. 앱/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">

또는 간단히

  • Refactor로 이동(스튜디오 -> 메뉴 -> Refactor)
  • Migrate to AndroidX를 클릭합니다.그건 효과가 있다.
  • 그건 효과가 있다.

먼저 매니페스트 태그에 이 줄을 추가해야 합니다.

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

그런 다음 도구를 추가하면 Android 스튜디오에서 제안한 도구를 대체할 수 있습니다.

  • 리팩터로 이동(이미지)
  • Migrate to AndroidX를 클릭합니다.그건 효과가 있다.
  • 그건 효과가 있다.

이거 먹어봐요.

tools:replace="android:appComponentFactory"
android:appComponentFactory="android.support.v4.app.CoreComponentFactory"

프로젝트를 재구성합니다.

저는 3일 동안 똑같은 문제를 겪었습니다.

안드로이드는 우리가 코틀린이나 안드로이드 X를 사용하기를 원하는 것과 같습니다. 그들은 안드로이드를 없애려고 합니다.

근데 이렇게 풀었어요.

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

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

이것이 적절한 대답인지 아닌지는 모르겠지만 저에게는 효과가 있었습니다.

그리들 래퍼 속성 증가

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

그리들을 구축합니다.

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

버전 때문에 오류가 나타납니다.

build.gradle(모듈: 앱)의 proguardFile을 다음으로 변경합니다.

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

대신에

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

이거 나한테 통했어요.

이 문제를 해결하기 위해 다음 변수에 대한 버전을 명시적으로 정의하는 것을 권장합니다.android/build.gradle당신의 근본적인 프로젝트에서

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

안드로이드 스튜디오의 경우 안드로이드 Gradle 플러그인 버전 3.3.2를 변경하고 Gradle 버전은 5.1.1입니다.

언급URL : https://stackoverflow.com/questions/51793345/android-material-and-appcompat-manifest-merger-failed

반응형