안드로이드 스튜디오 버전을 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-v7
은 25.0.0
을 사용중입니다.
build.gradle
에 compile '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
}