[안드로이드 Lint] Incompatible Gradle Versions

안드로이드 스튜디오 버전을 2.3으로 업데이트한 후 support package를 추가하면 다음과 같은 린트 에러가 발생합니다.

compile "com.android.support:support-v4:25.2.0"

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes)

문제는 내가 명시하지 않은 support package를, 외부 라이브러리에서 사용하는 것입니다.

.

Facebook SDK

예를 들어 Facebook SDK를 사용중이라면, Facebook SDK내부에서 support package를 참조하고 있습니다.

+- com.facebook.android:facebook-android-sdk:4.20.0
|  +- com.android.support:support-v4:25.0.0 -> 25.2.0 (*)
|  +- com.android.support:appcompat-v7:25.0.0 -> 25.2.0 (*)
|  +- com.android.support:cardview-v7:25.0.0
|  |  \- com.android.support:support-annotations:25.0.0 -> 25.2.0
|  +- com.android.support:customtabs:25.0.0 -> 25.2.0 (*)

Facebook SDK에서는 support package 25.0.0을 사용중입니다.

support-v4, appcompat-v7, customtabs는 최신버전인 25.2.0로 대체되었지만, cardview-v725.0.0을 사용중입니다.

build.gradlecompile 'com.android.support:cardview-v7:25.2.0'을 추가하면 support package가 모두 같은 버전을 사용하므로 Lint에러가 사라집니다.

.

외부 라이브러리에서 사용중인 support package 버전 확인하기
./gradlew app:dependencies --configuration=compile

위 결과를 보면 앱에서 사용중인 모든 support package 버전을 확인 할 수 있습니다. multidex를 제외한 모든 라이브러리를 명시해줘야 합니다.

(추가) 최신버전 gradle (4.1이상)에서는 compile대신 implementation으로 검색해야 합니다.

./gradlew app:dependencies --configuration=implementationDependenciesMetadata

.

Renderscript

Renderscript는 25.2.0 버전이 없기 때문에 disable 하는 방법밖에 없는듯하다. 링크

defaultConfig {
  renderscriptSupportModeEnabled false
}