안드로이드 앱의 앱모듈 gradle에서 activity를 import한게 없는디.. 어디서 왔니?


안드로이드 앱 프로젝트를 처음 만들면 아마 기본적으로 다음과 같이 앱 모듈 수준에서의 gradle이 이렇게 세팅이 될 것이다. (version catalog 적용시)


    implementation(libs.core.ktx)
    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.constraintlayout)

    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.test.ext.junit)
    androidTestImplementation(libs.espresso.core)

개인 프로젝트를 하려고 프로젝트를 생성하고 다중 권한 요청 때문에 RequestMultiplePermissions의 소스코드를 보려고 download source 를 눌렀는데 갑자기 에러 메세지로 androidx.activity:activity:1.6.0을 찾을수 없다고 나왔다.

응? 갑자기 왜 1.6.0이 어디서 튀어나온거지?

에러 메세지를 보고 처음에는 버전이 높아서 발생하는 이슈인가? 싶어서 activity 버전을 보는데 1.8.2로 나와있다.

순간 문득 1.6.0은 어디서 튀어 나왔는지가 궁금해졌다.

그래서 gradle을 보는데 위 코드 스니펫처럼 activity를 선언하지 않을걸 보고 activity가 transitive dependency로 파악은 했는데

문제는 누가 가져왔는지를 모르겠다.

자료를 찾다보니 dependency tree graph를 그려주는 명령어를 알게되었다.

./gradlew :<앱모듈이름, 기본은 app>:dependencies

...

+--- androidx.appcompat:appcompat:1.6.1
|    +--- androidx.activity:activity:1.6.0
|    |    +--- ...
|    |    +--- ...
|    |    +--- ...
|    |    +--- ...

...

결국 appcompat이 activity를 transitive dependency로 가져오는거였다.

요즘 들어서 부쩍 시간이라는 핑계로 자꾸 제대로 파악하지 않고 넘어가려는 습관이 생겼는데,

이렇게라도 사이드 프로젝트를 할 때 좀 더 깊이 알아봐야겠다.