스터디/Flutter+Dart

flutter android.support.v4.content does not exist, cannot find symbol ActivityCompat, ContextCompat

Dalmangyi 2019. 9. 27.

괜히 골치가...

뭔가 검색을 해도 마땅한게 안나오고... 

하란대로 해봐도 잘 안되고;;.

android 문제같긴한데...

 

 

Package

패키지가 만들어지는 시점에서 여러가지 빌드 환경이 주어지게 됩니다.

빌드 환경이 조금만 달라도 빌드가 안될 수 있기 때문에 신경써서 맞춰줘야 합니다. 

왠만하면 gradle버전, compileSdkVersion, minSdkVersion까지 맞추는걸 추천합니다. 

 

 

 

 

AndroidX (제트팩 라이브러리)

안드로이드 팀에서 여러가지를 지원하는 라이브러리(SupportLibrary)를 각각 제공하다가, 최근에 AndroidX 통합 라이브러리를 제공하기 시작했고, Android 9.0(API 28) 이상부터는 AndroidX를 사용이 필수가 되었습니다.

 

그래서 발빠른 flutter package 개발자는 androidX를 사용했고, 업데이트가 예전에 된 package는 SupportLibrary를 사용합니다.

결국 이런일로 인해 안드로이드 프로젝트의 메인이 되는 app 프로젝트에서는 androidX를 사용하면 supportLibrary를 사용하는 패키지에서는 symbol이 겹칠 수 있습니다. 그래서 위에 스크린샷 처럼 error가 발생하곤 합니다.

 

 

 

 

해결방법 정리

간단합니다.

 

1. Gradle버전 

프로젝트와 모든 모듈의 버전을 3.3.0으로 맞춥니다.

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
    }
}

 

2. AndroidX로 변경 (/project/app/build.gradle)

dependencies에 포함되는 support 관련 라이브러리를 없애고 androidx 라이브러리를 추가하는것.

dependencies {
    implementation 'androidx.core:core:1.0.1'
}

 

3. SdkVersion 맞추기 (/project/app/build.gradle)

compile을 28, min을 16으로 맞춰줍니다.

android {
    compileSdkVersion 28

    defaultConfig {
        minSdkVersion 16
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    
    ..
}

 

3. import 변경 (sourceCode)

기존에 사용하던 import는 사용하지 않도록 변경합니다.

import android.support.v4.app.ActivityCompat 
===> import androidx.core.app.ActivityCompat

import android.support.v4.content.ContextCompat 
===> import androidx.core.content.ContextCompat

 

4.property적용 (/project/gradle.properties)

아래 문구를 추가해서 AndroidX를 사용하고 

enableJetifier를 true로 적용해서 다른 라이브러리가 androidX용으로 작성된것처럼 자동변환한다는 옵션을 켜줍니다 (잘 안되는듯?)

android.useAndroidX=true
android.enableJetifier=true

 

 

 

5. 끝!

깔끔하게 gradle sync도 잘되고,

project build도 잘 됩니다 

 

 

댓글