스팀 앱 개발기 #101 - build.gradle에서 라이브러리 이름과 버전 통합
build.gradle에서 라이브러리 이름과 버전 통합
시작하며...
라이브러리 버전 업에 이어 이번에는 각 모듈의 build.gradle 파일들에서 각각 정의된 라이브러리 이름, 버전을 통합하는 작업을 진행했습니다. 향후 더 많은 모듈들을 생성해야 하기 때문에 이 작업은 반드시 해야 하는 것입니다.
기존 build.gradle 파일들이 내재한 문제점
프로젝트에서 각 모듈의 build.gradle 파일의 dependency 블록에서 중복된 라이브러리들이 정의되어 있는 것이 문제입니다. 예를 들면, dorian-steem-ui 모듈과 dorian-steem-data 모듈의 build.gradle 파일에서는 다음과 같이 코루틴 라이브러리가 추가되어 있습니다.
dependencies {
// ...
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
// ...
}
만약 새로운 기능을 개발하기 위해 라이브러리가 필요하다면, 2개 이상의 build.gradle 파일의 dependencies 블록에 이를 추가해야 합니다. 이 뿐만이 아니구요. 기존 라이브러리의 버전을 올려야 한다면, 역시 복수의 동일 파일들을 수정해야 할 수 있습니다. 여러 파일들의 dependencies를 관리한다는 것이 모듈이 많을 수록 더 어려워집니다. 라이브러리 버전이 모듈마다 다르다는 실수를 범할 수 있고요. 이는 앱의 심각한 오류를 발생시킬 수도 있습니다.
해결책
기존 build.gradle 파일들이 공통적으로 참조할 gradle 파일을 생성했습니다. 이름은 build.dependencies.gradle입니다. 그리고 이 파일에 라이브러리 이름/버전을 갖는 맵 객체들을 생성합니다.
ext {
androidx = [
appcompat: 'androidx.appcompat:appcompat:1.4.2',
constraintlayout: 'androidx.constraintlayout:constraintlayout:2.1.4',
core: 'androidx.core:core-ktx:1.7.0',
lifecycle_livedata_ktx: 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1',
lifecycle_viewmodel_ktx: 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1',
navigation_fragment_ktx: 'androidx.navigation:navigation-fragment-ktx:2.5.3',
navigation_ui_ktx: 'androidx.navigation:navigation-ui-ktx:2.5.3',
swiperefreshlayout: 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0',
// for test
core_testing: 'androidx.arch.core:core-testing:2.2.0',
espresso_core: 'androidx.test.espresso:espresso-core:3.5.1',
junit: 'androidx.test.ext:junit:1.1.5'
]
glide = [
glide: 'com.github.bumptech.glide:glide:4.11.0',
compiler: 'com.github.bumptech.glide:compiler:4.11.0'
]
google = [
material: 'com.google.android.material:material:1.9.0'
]
retrofit = [
retrofit: 'com.squareup.retrofit2:retrofit:2.9.0',
adapter_java: 'com.squareup.retrofit2:adapter-rxjava2:2.3.0',
converter_gson: 'com.squareup.retrofit2:converter-gson:2.9.0'
]
rxjava = [
rxjava: 'io.reactivex.rxjava2:rxjava:2.2.20',
rxandroid: 'io.reactivex.rxjava2:rxandroid:2.0.1'
]
coroutines = [
coroutines: 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4',
// for test
coroutines_test: 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4'
]
others = [
junit: 'junit:junit:4.13.2'
]
}
모듈들의 build.gradle 파일에서는 build.dependencies.gradle 파일을 임포트(import) 하구요. 후자 파일에 정의된 값들을 활용하여 라이브러리를 추가해 주었습니다. 예를 들어, dorian-steem-data 모듈의 build.gradle 파일의 dependencies 블록은 아래와 같이 수정하였습니다.
dependencies {
// To refer to other modules
implementation project(":dorian-steem-domain")
implementation project(":dorian-steem-test")
// retrofit
implementation retrofit.retrofit
implementation retrofit.adapter_java
implementation retrofit.converter_gson
// rx
implementation rxjava.rxjava
// coroutines
implementation coroutines.coroutines
// For unit test
testImplementation others.junit
testImplementation coroutines.coroutines_test
}
GitHub Commit
마치며...
다음 화면 개발을 시작하기 전에 build.gradle 파일을 수정해야 했습니다. 이전 화면들을 만들면서 이미 인지하고 있던 문제였고, 이제야 해결할 수 있었습니다. 내일부터는 마음 편하게 다음 화면 개발을 할 수 있겠습니다.
지난 스팀 앱 개발기
- #100 - 라이브러리 버전 업
- #99 - 포스트의 이미지들을 보여 줄 뷰 페이저 화면 개발
- #98 - 다음에 개발할 기능
- #97 - 보팅 리스트 화면, 프로필 이미지 화면의 데이터 바인딩 제거, 리팩토링
- #96 - RxJava를 코루틴으로 대체 후 테스트 코드 수정
- #95 - 지갑 화면 구조 개선
- #94 - 태그 화면 구조 개선
- #93 - 보팅 리스트 화면에서 프로필 이미지 클릭 기능 구현
- #92 - 태그 화면이 포스트 리스트 로딩 중에 다른 탭 클릭하면 앱이 죽는 문제 (2) 해결 방법
- #91 - 태그 화면이 포스트 리스트 로딩 중에 다른 탭 클릭하면 앱이 죽는 문제 (1) 오류 내용, 원인
- #90 - 태그 화면에서 이미지가 뭉개지는 문제
- #89 - 태그 화면에서 다운보팅 카운트 클릭하면 앱이 죽는 문제
- #88 - 보팅 리스트 화면에 스팀잇 계정 검색 기능 추가
- #87 - 보팅 리스트 화면 개선: (1) 다운보팅도 보여주기 (2) 계정 썸네일 로딩 속도 개선
- #86 - 보팅 리스트 관련 데이터 클래스 보완
- #85 - 보팅 리스트 화면 구현
- #84 - 보팅 리스트 화면 구현을 위한 데이터 클래스 추가/변경
- #83 - 포스트의 보팅 리스트에서 각 보팅의 가치 계산 방법 정리
- #82 - 포스트의 보팅 리스트에서 각 보팅의 가치는 어떻게 계산해야 하나?
- #81 - 보팅 리스트 화면 개발 예정
- #80 - 버그 수정: 태그 화면 시작시 bridge.get_ranked_posts API가 여러 번 실행되는 문제
- #79 - 태그 화면에 새로 고침 기능 추가
- #78 - 태그 화면에서 포스트들의 디폴트 썸네일 변경
- #77 - 태그 화면에서 썸네일 없는 포스트 항목에 엉뚱한 썸네일이 보이는 오류
- #76 - 태그 검색시 앱이 죽는 버그 수정
- #75 - 태그 화면의 포스트 항목에 태그/커뮤니티 표시
- #74 - 태그 화면에서 포스트 리스트 추가 로딩시 깜빡임 문제 해결
- #73 - 태그 화면의 포스트 리스트에 무한 스크롤 적용
- #72 - 태그 화면의 포스트 리스트에서 항목들 사이 분리선 보이기
- #71 - 태그 화면에서 포스트 항목들의 썸네일 로딩
- #70 - 태그 화면 1차 구현
- #69 - 태그 화면에 데이터 바인딩 적용
- #68 - 태그 화면(TagsFragment) 구성
- #67 - TagsViewModel 클래스에 포스트 리스트 구하는 메소드 그리고 라이브 데이터 추가
- #66 - bridge.get_ranked_posts API 연동 구현: ReadRankedPostsUseCase 클래스 추가
- #65 - bridge.get_ranked_posts API 연동 구현: SteemRepository 인터페이스, SteemRepositoryImpl 클래스 수정
- #64 - bridge.get_ranked_posts API 연동 구현: SteemService 인터페이스에 메소드 추가
- #63 - bridge.get_ranked_posts API 관련 데이터 클래스 추가 수정
- #62 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 수정
- #61 - layout_post_item.xml 수정 후 예상치 못한 빌드 오류
- #60 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 정의
- #59 - 태그별 포스트 리스트를 구하기 위한 bridge.get_ranked_posts API
- #58 - 포스트 리스트를 구성할 항목의 레이아웃 (3) 데이터 클래스 정의 및 데이터 바인딩 적용
- #57 - 포스트 리스트를 구성할 항목의 레이아웃 (2)
- #56 - 포스트 리스트를 구성할 항목의 레이아웃
- #55 - .gitignore 파일 작성
- #54 - RxJava 관련 메모리 누수 방지 코드 작성
- #53 - 버그 수정: 인터넷 미연결시 API 실행하면 앱 강제 종료
- #52 - 인터넷 미연결시 API 실행하면 어떻게 될까?
- #51 - 파워다운 끝났으나 SP to power down 값이 0이 아닌 버그
- #1 ~ #50
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.
안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!
Upvoted! Thank you for supporting witness @jswit.