Dependency(종속 항목)란?
안드로이드 스튜디오에서 Gradle 빌드 시스템을 사용하면 외부 바이너리나 다른 라이브러리 모듈을 빌드에 종속되는 항목으로 추가할 수 있다. dependencies 블록에서 여러 가지 종속 항목 구성을 사용해 라이브러리 또는 플러그인을 종속 항목으로 선언해 사용하게 되는데 이때 사용하는 구성의 이름을 통해 어떤 범위에서 어떤 시기에 사용되는지 유추할 수 있다. 오늘은 각 구성의 특성에 대해서 알아본다.
implementation
가장 일반적으로 사용되는 유형으로, 현재 모듈 내에서만 사용되며 외부 모듈로 노출되지 않는다. 따라서 api와는 달리 빌드 시스템에서 다시 컴파일해야 하는 모듈 수가 줄어들어 빌드 속도가 크게 개선될 수 있다. 따라서 대부분의 앱과 테스트 모듈은 이 구성을 사용하게 된다.
implementation("androidx.core:core-ktx:1.13.1")
- testImplementation
이름에서 알 수 있듯이 테스트 소스 세트에서만 사용되는 라이브러리를 선언할 때 사용한다. 예를 들어 로컬 테스트 라이브러리, JUnit 같은 테스트 프레임워크, 목킹 라이브러리 등에 사용된다.
testImplementation("junit:junit:4.13.2") testImplementation("org.mockito:mockito-core:$mockitoVersion")
- androidTestImplementation
안드로이드 테스트 환경 전반에서 사용되는 dependency로 계측 테스트인 UI 테스트, Espresso, UI Automator 등에 사용된다.
androidTestImplementation("androidx.test:core-ktx:1.5.0") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
- debugImplementation
디버그 빌드에만 적용되며, 디버깅 도구 및 라이브러리, 분석 도구, 검증 도구 등에 사용된다.
debugImplementation("androidx.compose.ui:ui-tooling:1.6.8") debugImplementation("androidx.fragment:fragment-testing-manifest:1.8.2")
- releaseImplementation
릴리즈 빌드에만 적용되며, 성능 최적화 라이브러리, 보안 강화 도구 등의 라이브러리 선언에 사용된다.
releaseImplementation("com.google.firebase:firebase-analytics:jar:22.0.2")
api
implementation과 유사하게 사용되지만, 주요 차이점은 api를 사용하여 추가된 라이브러리는 모듈의 API를 통해 다른 모듈에 노출되고 해당 구성이 외부 API를 변경하면 연결된 모든 모듈이 새롭게 컴파일하기 때문에 빌드 속도가 크게 증가할 수 있어 외부 모듈에 노출해야하는 api가 아니라면 implementation을 사용해야 한다.
api("com.google.dagger:dagger:2.41") api("io.reactivex.rxjava2:rxjava:2.2.21") api("com.squareup.retrofit2:retrofit:2.9.0")
이 외에도 api에 debug와 release가 붙는 등 여러 가지 유형이 있지만 대부분 여기 있는 유형의 조합으로 만들어지므로 어떤 상황에서 사용되는지 충분히 이해할 수 있을 것이다.
compileOnly
컴파일 시에만 사용된다는 뜻으로 컴파일 클래스 경로에만 dependency를 추가하여 빌드 출력에는 추가되지 않는다. 런타임에는 포함되지 않는(포함하지 않아도 문제없이 동작하는) 주석 프로세서나 옵셔널 API의 인터페이스 같은 라이브러리를 추가할 때 사용하면 앱의 크기를 줄이는데 도움이 된다.
compileOnly("com.google.dagger:dagger:2.51.1")
runtimeOnly
compileOnly와는 반대로 런타임에서만 사용할 라이브러리를 추가할 때 사용하며 빌드 출력에만 추가되며 컴파일 클래스 경로에는 추가되지 않는다. 안드로이드에서는 잘 사용하지 않는 구성이며 서버 애플리케이션에서 주로 사용하여 데이터베이스 드라이버 등에 사용한다.
runtimeOnly("com.h2database:h2") runtimeOnly("mysql:mysql-connector-java")
Reference
https://developer.android.com/build/dependencies?hl=ko
빌드 종속 항목 추가 | Android Studio | Android Developers
Android 스튜디오에서 Gradle 빌드 시스템을 이용하여 빌드 종속성을 추가하는 방법에 관해 알아보세요.
developer.android.com
https://developer.android.com/training/testing/local-tests?hl=ko
로컬 단위 테스트 빌드 | Android 개발자 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 로컬 단위 테스트 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 로컬 테스트는 Android 기기나 에
developer.android.com
https://developer.android.com/training/testing/instrumented-tests?hl=ko
계측 테스트 빌드 | Android 개발자 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 계측 테스트 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 계측 테스트는 실제 기기 또는 에뮬
developer.android.com