API 28 (P) 용 Android 디자인 지원 라이브러리가 작동하지 않음


106

android-P SDK 환경을 성공적으로 구성했습니다. Android 디자인 지원 라이브러리를 사용하려고하면 프로젝트 빌드 오류가 발생합니다. 프로젝트 구성은 다음과 같습니다.

IDE : 3.2 Canary 17 대상 API : 28 컴파일 API : 28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

빌드 실패 오류는 다음과 같습니다.

매니페스트 병합 실패 : [androidx.core : core : 1.0.0-alpha3] AndroidManifest.xml : 22 : 18-86의 속성 application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory)도 [com.android에 있습니다. .support : support-compat : 28.0.0-alpha3] AndroidManifest.xml : 22 : 18-91 value = (android.support.v4.app.CoreComponentFactory). 제안 : 재정의하려면 AndroidManifest.xml : 6 : 5-40 : 19의 요소에 'tools : replace = "android : appComponentFactory"'를 추가하세요.


:이 답변을 확인해 봤어 stackoverflow.com/a/54825603/1318946
Pratik Butani

답변:


89

이전 API 패키지 버전의 아티팩트 또는 새 Androidx를 사용할 수 있으며 둘 다 사용할 수는 없습니다.

이전 버전을 사용하려면 종속성을

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    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.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

Androidx를 사용하려는 경우 :

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}

2
이 대답은 받아 들여 져야합니다. medium.com/mindorks/…에
Rawa

에서 com대체되지 않은 이유는 무엇 입니까? materialimplementation
RoCk RoCk

58

중요한 업데이트

Android는 28.0.0.

이것은 android.support 패키징의 마지막 기능 릴리스이며 개발자는 AndroidX 1.0.0 으로 마이그레이션하는 것이 좋습니다 .

따라서 AndroidX 라이브러리를 사용 하십시오 .

  • 프로젝트에서 SupportAndroidX모두 사용 하지 마십시오 .
  • 라이브러리 모듈 또는 종속성은 여전히 ​​지원 라이브러리를 가질 수 있습니다. Androidx Jetifier가 처리합니다.
  • androidx알파, 베타, rc에는 앱과 함께 제공하고 싶지 않은 버그가있을 수 있으므로 안정적인 버전 또는 라이브러리를 사용하십시오.

귀하의 경우

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

이상하게도 내 프로젝트는 오랫동안 P에 있었지만 오늘 빌드 할 때 지원 라이브러리 오류가 발생하기 시작했습니다. 내가 여기에 빠진 것이 있습니까?
Talha

우리 모두가 며칠 동안 직면하는 일반적인 오류이며 프로젝트를 실행하는 동안 며칠마다 직면합니다. 캐시를 무효화하고 다시 시작하십시오.
Khemraj

@Talha 메뉴에서 Build> Clear Project 다음 Build> Make Project를 먼저 시도합니다. 그렇지 않은 경우 캐시를 무효화하고 다시 시작하면 캐시를 무효화하고 다시 시작하는 데 많은 시간이 걸리고 모든 프로젝트의 캐시가 삭제되므로이 정도면 충분합니다.

43

이거 추가 해봐:

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

매니페스트 애플리케이션에

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

도움이 되길 바랍니다


당신은 무엇을 가지고 @string/action_settings있습니까?
Aliton Oliveira

나는 문제가 있었다 : 하나 개 이상의 파일은 OS 독립적 인 경로 'META-INF / androidx.core_core.version 발견되었다
Aliton 올리베이라

두 줄 추가 후 오류 : * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363

2
AndroidManifest.xml 헤더 내에 xmlns : tools = " schemas.android.com/tools " 를 추가 했습니까 ?
카를로스 산티아고

2
: 안드로이드 / SRC / 디버그 /이 비슷한 제목 아래 매니페스트<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google은 새로운 AndroidX 를 도입 했습니다 종속성 . AndroidX로 마이그레이션해야합니다. 간단합니다.

AndroidX 종속성에 대한 모든 종속성을 대체했습니다.

오래된 디자인 의존성

implementation 'com.android.support:design:28.0.0'

새로운 AndroidX 디자인 종속성

implementation 'com.google.android.material:material:1.0.0-rc01'

AndroidX 종속성은 https://developer.android.com/jetpack/androidx/migrate에서 찾을 수 있습니다.


자동 AndroidX 마이그레이션 옵션 (Android Studio 3.3 이상에서 지원됨)

메뉴 모음에서 Refactor> Migrate to AndroidX를 선택하여 AndroidX를 사용하도록 기존 프로젝트를 마이그레이션합니다.


1
구현 'com.google.android.material : material : 1.1.0-alpha05'이것은 새로운 버전입니다
Hitesh Tarbundiya

'import android.support.design.widget.TabLayout;'대신 넣을 내용 ?
temirbek

6

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

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

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

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

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

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

@Carlos Santiago에 대한 답변에 감사드립니다 : API 28 (P)에 대한 Android 디자인 지원 라이브러리가 작동하지 않습니다.


이 솔루션은 현재 AndroidX를 사용해야하므로 향후 호환되지 않습니다. 게시 된 이전 애플리케이션은 지금 업그레이드해야합니다. 재 작업이 많은 경우에도 해당 변경 사항을 적용해야합니다.
Abhinav Saxena

@Abhinav Saxena 맞습니다. 이전 SDK 버전에서이 문제를 해결하는 것보다 프로젝트를 28로 더 잘 업데이트해야합니다. :)
Codios 2018

이것은 받아 들여지는 대답입니다. 많은 제안 후에도 도움이되지 않았지만 이것은 구성으로 나를 도왔습니다 .all {}. 고마워요.
Noor Hossain 19


4

gradle.properties 파일을 열고 다음 두 줄을 추가합니다.

android.useAndroidX = true
android.enableJetifier = true

청소 및 구축


1
useAndroidX는 컴파일러에게 androidx 사용자에게 알립니다. 안드로이드 지원 패키지 대신 파일
Lena Bru

이렇게하면 Studio 3.2 이상이 AndroidX로 마이그레이션됩니다. AndroidX로 마이그레이션 된 모든 라이브러리는 종속성에서 수정되어야합니다.
Abhinav Saxena

3

참고 : 앱에서 com.android.support 및 com.google.android.material 종속성을 동시에 사용해서는 안됩니다.

build.gradle (app) 파일에 Android 용 재료 구성 요소 추가

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

앱이 현재 원래 디자인 지원 라이브러리에 의존하는 경우 Android Studio에서 제공하는 Refactor to AndroidX… 옵션을 사용할 수 있습니다. 이렇게하면 새로 패키징 된 androidx 및 com.google.android.material 라이브러리를 사용하도록 앱의 종속성 및 코드가 업데이트됩니다.

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


3

우선, gradle.properties를보고이 값이 true 여야 합니다 . 볼 수 없다면 글을 써야합니다.

android.useAndroidX=true
android.enableJetifier=true

그런 다음 build.gradle (Module : app) 에서 AndroidX 종속성을 사용할 수 있습니다 . 또한 compileSDKVersiontargetVersion 을 확인해야합니다. . 최소 28 개 여야합니다. 예를 들어 29를 사용하고 있습니다.

따라서 androidx 종속성 예제 :

implementation 'androidx.cardview:cardview:1.0.0'

모든 것이 시작되지 않기 때문에주의 androidx 같은 cardview 의존성 . 예를 들어, 이전 설계 종속성 은 다음과 같습니다.

implementation 'com.android.support:design:27.1.1'

그러나 새로운 디자인 의존성 은 다음과 같습니다.

implementation 'com.google.android.material:material:1.1.0'

따라서 신중하게 검색하고 읽어야합니다. 행복한 코드.

뿡 빵뀨


2

나는 모두 androidx.*appropiate package name .

라인 변경

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

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

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

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

유명한

  • tools:replace="android:appComponentFactory"AndroidManifest에서 제거

0

아래 코드는 저와 완벽하게 작동했습니다.

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}

0

이 시도:

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

0

이에 대한 Android 문서는 명확합니다. 아래 페이지로 이동합니다. 아래에 "OLD BUILD ARTIFACT""AndroidX 빌드 아티팩트"라는 이름의 두 개의 열이 있습니다.

https://developer.android.com/jetpack/androidx/migrate

이제 gradle에 많은 종속성이 있습니다. Androidx 빌드 아티팩트와 일치시키고 gradle에서 대체하십시오.

충분하지 않습니다.

MainActivity (모든 활동에 대해 반복)로 이동하여 "public class MainActivity extends AppCompatActivity"문에서 AppCompact Activity라는 단어를 제거하고 동일한 단어를 다시 작성합니다. 그러나 이번에는 androidx 라이브러리를 가져옵니다. 지금까지 appcompact 지원 파일을 가져 왔습니다. 사용됨 (또한 해당 appcompact import 문 제거).

또한 레이아웃 파일로 이동하십시오. 제약 레이아웃이 있다고 가정하면 xml 파일의 첫 줄 제약 레이아웃에 appcompact와 관련된 내용이 있음을 알 수 있으므로 삭제하고 Constraint 레이아웃을 다시 작성하십시오. 그러나 이제는 androidx 관련 제약 레이아웃이 추가됩니다.

많은 활동과 xml 레이아웃 파일에 대해이 작업을 반복합니다.

하지만 걱정하지 마세요. Android Studio는 컴파일하는 동안 가능한 모든 오류를 표시합니다.


0

비슷한 문제가있었습니다. build.gradle에 추가되었으며 나를 위해 일했습니다.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

AndroidX로 마이그레이션하지 않고이 문제를 해결하려면 (권장하지 않음)

이 매니페스트 병합 문제는 androidX를 사용하는 종속성 중 하나와 관련이 있습니다.

이 종속성의 릴리스 버전을 줄여야합니다. 내 경우 :

나는 구글이나 파이어베이스를 사용하고 있었다

api 'com.google.android.gms:play-services-base:17.1.0'

지원 라이브러리에서 사용하려면 15.0.1을 줄여야합니다.


0

androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'나를 위해 일을 추가 합니다.

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