이번 포스팅에서는 buildSrc가 적용된 Gradle에서 디펜던시 버전을 체크하는 방법에 대해 알아보도록 하겠습니다.
안드로이드 스튜디오는 프로젝트의 디펜던시에 대해 다음 린트를 실행시키기 때문에 새 버전이 있을 경우 자동으로 알림을 받을 수 있지만, dependency 추가에 buildSrc를 적용하면 이 린트 기능을 활용할 수 없게 됩니다.
1
Editor > Inspections > Android > Lint > Correctness > Newer Library Versions Available
이런 문제를 해결하기 위해서 여기서는 IDE의 기능에 관계없이 디펜던시 버전을 체크해주는 Gradle Versions Plugin 을 사용하는 방법에 대해 알아보도록 하겠습니다.
여기서는 저의 Modern Android Development 인프런 강의 에서 만들어 본 BookSearchApp 에 기능을 적용해 보도록 하겠습니다. 우선은 프로젝트 레벨의 build.gradle
에 플러그인을 추가합니다.
1
2
3
plugins {
id ( "com.github.ben-manes.versions" ) version "0.43.0"
}
다음은 네트워크에서 아티팩트 정보를 받아온 뒤 안정버전인지 여부를 판정하는 함수를 추가합니다.
1
2
3
4
5
6
fun isNonStable ( version : String ): Boolean {
val stableKeyword = listOf ( "RELEASE" , "FINAL" , "GA" ). any { version . toUpperCase (). contains ( it ) }
val regex = "^[0-9,.v-]+(-r)?$" . toRegex ()
val isStable = stableKeyword || regex . matches ( version )
return isStable . not ()
}
다음은 디펜던시 버전을 체크하는 태스크를 정의합니다. 제한사항을 rejectVersionIf
로 간편하게 정의할 수도 있고 full syntax를 써서 정의할 수도 있습니다. 또한 옵션을 정의할 수도 있는데요, 각 프로퍼티의 기능은 이름을 보면 잘 알 수 있게 되어 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
tasks . named < DependencyUpdatesTask >( "dependencyUpdates" )
. configure {
// isStable에 해당되지 않는 모든 버전을 거부
rejectVersionIf {
isNonStable ( candidate . version )
}
// optional parameters
checkForGradleUpdate = true
outputFormatter = "json"
outputDir = "build/dependencyUpdates"
reportfileName = "report"
}
}
그리고나서 dependencyUpdate
를 실행시키면 콘솔 화면에 체크 결과가 출력되고, 옵션에 설정된 json 파일도 생성되는 것을 확인할 수 있습니다.
1
./gradlew dependencyUpdate
인프런 강의에서 만들어 본 BookSearchApp 의 디펜던시를 체크한 결과는 다음과 같습니다. 프로젝트가 마무리 된 2022년 4월 이후로 많은 업데이트가 있었던 것을 확인할 수 있네요. 나머지는 업데이트가 필요한 디펜던시를 찾아 버전을 올리면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------
The following dependencies are using the latest milestone version:
- androidx.datastore:datastore-preferences:1.0.0
- androidx.hilt:hilt-compiler:1.0.0
- androidx.hilt:hilt-work:1.0.0
- androidx.paging:paging-runtime-ktx:3.1.1
- androidx.recyclerview:recyclerview:1.2.1
- androidx.test:core:1.4.0
- androidx.test:runner:1.4.0
- androidx.test.espresso:espresso-contrib:3.4.0
- androidx.test.espresso:espresso-core:3.4.0
- androidx.test.ext:junit:1.1.3
- androidx.test.ext:truth:1.4.0
- androidx.work:work-runtime-ktx:2.7.1
- com.google.android.libraries.mapsplatform.secrets-gradle-plugin:com.google.android.libraries.mapsplatform.secrets-gradle-plugin.gradle.plugin:2.0.1
- com.squareup.retrofit2:converter-moshi:2.9.0
- com.squareup.retrofit2:retrofit:2.9.0
- junit:junit:4.13.2
- org.hamcrest:hamcrest:2.2
The following dependencies have later milestone versions:
- androidx.activity:activity-ktx [1.4.0 -> 1.6.1]
https://developer.android.com/jetpack/androidx/releases/activity#1.6.1
- androidx.appcompat:appcompat [1.4.1 -> 1.5.1]
https://developer.android.com/jetpack/androidx/releases/appcompat#1.5.1
- androidx.constraintlayout:constraintlayout [2.1.3 -> 2.1.4]
http://tools.android.com
- androidx.core:core-ktx [1.7.0 -> 1.9.0]
https://developer.android.com/jetpack/androidx/releases/core#1.9.0
- androidx.databinding:viewbinding [7.1.3 -> 7.3.1]
- androidx.fragment:fragment-ktx [1.4.1 -> 1.5.4]
https://developer.android.com/jetpack/androidx/releases/fragment#1.5.4
- androidx.lifecycle:lifecycle-runtime-ktx [2.4.1 -> 2.5.1]
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1
- androidx.lifecycle:lifecycle-viewmodel-ktx [2.4.1 -> 2.5.1]
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1
- androidx.lifecycle:lifecycle-viewmodel-savedstate [2.4.1 -> 2.5.1]
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1
- androidx.navigation:navigation-fragment-ktx [2.4.1 -> 2.5.3]
https://developer.android.com/jetpack/androidx/releases/navigation#2.5.3
- androidx.navigation:navigation-ui-ktx [2.4.1 -> 2.5.3]
https://developer.android.com/jetpack/androidx/releases/navigation#2.5.3
- androidx.navigation.safeargs.kotlin:androidx.navigation.safeargs.kotlin.gradle.plugin [2.4.1 -> 2.5.3]
https://developer.android.com/jetpack/androidx/releases/navigation#2.5.3
- androidx.room:room-compiler [2.4.2 -> 2.4.3]
https://developer.android.com/jetpack/androidx/releases/room#2.4.3
- androidx.room:room-ktx [2.4.2 -> 2.4.3]
https://developer.android.com/jetpack/androidx/releases/room#2.4.3
- androidx.room:room-paging [2.4.2 -> 2.4.3]
https://developer.android.com/jetpack/androidx/releases/room#2.4.3
- androidx.room:room-runtime [2.4.2 -> 2.4.3]
https://developer.android.com/jetpack/androidx/releases/room#2.4.3
- com.android.application:com.android.application.gradle.plugin [7.1.3 -> 7.3.1]
https://developer.android.com/studio/build
- com.android.library:com.android.library.gradle.plugin [7.1.3 -> 7.3.1]
https://developer.android.com/studio/build
- com.google.android.material:material [1.5.0 -> 1.7.0]
https://github.com/material-components/material-components-android
- com.google.dagger:hilt-android [2.41 -> 2.44]
https://github.com/google/dagger
- com.google.dagger:hilt-android-compiler [2.41 -> 2.44]
https://github.com/google/dagger
- com.google.dagger:hilt-android-testing [2.41 -> 2.44]
https://github.com/google/dagger
- com.google.dagger:hilt-compiler [2.41 -> 2.44]
https://github.com/google/dagger
- com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin [2.41 -> 2.44]
https://github.com/google/dagger
- com.squareup.moshi:moshi [1.13.0 -> 1.14.0]
https://github.com/square/moshi/
- com.squareup.moshi:moshi-kotlin-codegen [1.13.0 -> 1.14.0]
https://github.com/square/moshi/
- com.squareup.okhttp3:logging-interceptor [4.9.3 -> 4.10.0]
https://square.github.io/okhttp/
- com.squareup.okhttp3:okhttp [4.9.3 -> 4.10.0]
https://square.github.io/okhttp/
- io.coil-kt:coil [1.4.0 -> 2.2.2]
https://github.com/coil-kt/coil
- org.jacoco:org.jacoco.ant [0.8.3 -> 0.8.8]
http://jacoco.org
- org.jetbrains.kotlin:kotlin-annotation-processing-gradle [1.6.10 -> 1.7.20]
https://kotlinlang.org/
- org.jetbrains.kotlin:kotlin-parcelize-compiler [1.6.10 -> 1.7.20]
https://kotlinlang.org/
- org.jetbrains.kotlin:kotlin-parcelize-runtime [1.6.10 -> 1.7.20]
https://kotlinlang.org/
- org.jetbrains.kotlin:kotlin-stdlib [1.6.10 -> 1.7.20]
https://kotlinlang.org/
- org.jetbrains.kotlin.plugin.serialization:org.jetbrains.kotlin.plugin.serialization.gradle.plugin [1.6.10 -> 1.7.20]
https://kotlinlang.org/
- org.jetbrains.kotlinx:kotlinx-coroutines-android [1.6.0 -> 1.6.4]
https://github.com/Kotlin/kotlinx.coroutines
- org.jetbrains.kotlinx:kotlinx-coroutines-core [1.6.0 -> 1.6.4]
https://github.com/Kotlin/kotlinx.coroutines
- org.jetbrains.kotlinx:kotlinx-coroutines-test [1.6.2 -> 1.6.4]
https://github.com/Kotlin/kotlinx.coroutines
- org.jetbrains.kotlinx:kotlinx-serialization-json [1.3.2 -> 1.4.1]
https://github.com/Kotlin/kotlinx.serialization
- org.robolectric:robolectric [4.8.1 -> 4.9]
http://robolectric.org
Failed to determine the latest version for the following dependencies (use --info for details):
- com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin
- org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin
Gradle release-candidate updates:
- Gradle: [7.2 -> 7.5.1 -> 7.6-rc-1]
Generated report file build/dependencyUpdates/report.json
이렇게 해서 Gradle에서 사용된 디펜던시의 버전을 체크하는 법에 대해 알아보았습니다.
VIDEO