본문 바로가기

Android78

[Android] Multi-Module 구조에서 Navigation을 구현하자 (with DeepLink) 배경 이번에는 Multi-Module구조에서 Navigation을 적용하는 방법에 대해 정리해볼까 합니다. 제가 모듈화를 적용하면서 feature 단위로 모듈을 나눴을 때 2개의 feature 간의 의존성이 없기 때문에 어떻게 이동해야하는지 막막했던 경험이 있습니다. 다른 포스팅을 참고하려고 해도 이게 뭔소린가 싶은 내용도 있었고, 따라 적용해봤지만 좀 더 좋은 구조를 찾고 싶다는 마음이 생긴 적도 있었기에 제가 직접 구현하고 정리해서 이 글을 통해 다른 분들이 조금이나마 쉽게 Navigation을 적용하셨으면 합니다! ※ Compose가 아닌 일반 XML을 활용한 방식입니다. 만약에 Compose Navigation을 원하시면 댓글로 남겨주세요 ㅎㅎ 빠른 시일 내로 정리해보도록 하겠습니다! Naviga.. 2023. 9. 19.
[Android] 'excludes' is deprecated Android 컴포즈 프로젝트를 생성했을 때 build.gradle에서 'excludes' is deprecated Warning이 발생했을 때는 다음과 같이 수정해주시면 됩니다. // 수정 전 packaging { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } // 수정 후 packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } 참고 https://stackoverflow.com/questions/75172062/how-to-replace-deprecated-packagingoptions-in-android-gradle-build-files 2023. 9. 19.
[Android] implementation과 testImplementation의 차이 배경 현재 프로젝트에 테스트 코드를 도입하려고 여러 자료를 공부하는 와중에 nowinandroid testing 모듈에 대한 의존성 설정에 대한 의문점이 들었습니다. A -> B, B -> A에 대한 의존성을 가질 때 순환참조가 발생하게 되는데 왜 발생하지 않을까? 라는 의문이 들었고 한번 내용을 정리해보고자 합니다. 순환참조에 대한 개념은 이 링크를 참고해주세요! implementation의 종류 implementation의 종류에는 implementation, testImplementation, androidTestImplementation, debugImplementation이 있습니다. 앞에 붙은 이름은 각 라이브러리들이 적용될 범위를 뜻합니다. 애플리케이션을 개발할 때 릴리즈, 디버그, 테스트 .. 2023. 9. 2.
[Android] Compose Navigation + Stateflow를 쓰는데 왜 리컴포지션이 계속 발생하지..? (1) 문제 배경 이번에는 제가 경험 했던 Compose Navigation과 Stateflow를 같이 사용했을 때 발생했던 문제에 대해서 작성해보려 합니다. 저는 Android Developer에서 제공되는 Compose Navigation의 NavHost를 참고했습니다. ViewModel의 경우 간단하게 다음과 같이 구성하겠습니다. class MyViewModel : ViewModel() { private val _test = MutableStateFlow(null) val test = _test.asStateFlow() fun update(check: Boolean?) { _test.value = check } } 화면 구성의 경우 StartScreen, A, B 화면을 두고 StartScreen에서 Vi.. 2023. 8. 7.
[Android] ViewModelScope 제대로 알고 사용하는걸까? ViewModel에서는 viewModelScope를 사용하라던데? 항상 코루틴을 사용하면서 MVVM 패턴을 적용할 때 ViewModel에서 viewModelScope를 사용하신 경험들이 다들 있으실 겁니다. 안드로이드 공식문서에서도 ViewModel에서 다음과 같이 사용하라고 정리되어있습니다. class MyViewModel: ViewModel() { init { viewModelScope.launch { // Coroutine that will be canceled when the ViewModel is cleared. } } } 하지만 코루틴을 사용할 땐 Dispatcher를 지정해주는 것도 중요한데, 이런 부분을 간과하고 문서대로만 사용했다는 생각이 들어서 한번 내부적으로 정리해보려고 합니다. vi.. 2023. 7. 29.
[Android] strings.xml에서 %d%를 해결하는 방법 다음과 같이 적용해주시면 됩니다. %1$d%% resources.getString(R.string.percent, 10) 2023. 7. 2.
[Android] Service에 대한 정리 Android에서 Service란? 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다. 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있으며, 이는 사용자가 다른 애플리케이션을 전환하더라도 백그라운드에서 계속해서 실행됩니다. 이 외에도, 구성 요소를 서비스에 바인딩하여 서비스와 상호작용할 수 있으며, 심지어는 프로세스 간 통신 (IPC)도 수행할 수 있습니다. 예를 들어 한 서비스는 네트워크 트랜잭션을 처리하고, 음악을 재생하고 파일 I/O를 수행하거나 콘텐츠 제공자와 상호작용할 수 있으며 이 모든 것을 백그라운드에서 수행할 수 있습니다. Service 유형 서비스에는 총 3가지 타입이 존재합니다. 1. Foreground Servic.. 2023. 6. 18.
[Android] SharedPreference commit()과 apply() 중 어떤 걸 써야할까? commit() 이 편집기에서 편집 중인 SharedPreferences Object로 preferences 변경사항을 다시 commit합니다. 요청된 수정 작업이 원자적으로 수행되어 모든 수정 작업을 대체할 수 있습니다. 두 편집자가 동시에 수정할 때 commit을 호출하는 마지막 편집자가 승리합니다. 반환 값이 중요하지 않고 application의 메인 스레드로부터 사용한다면 apply를 대신 사용하는 것이 좋습니다. @return 새 값이 영구 스토리지에 성공적으로 기록된 경우 true를 반환합니다. 소스 코드 @Override public boolean commit() { long startTime = 0; if (DEBUG) { startTime = System.currentTimeMillis(.. 2023. 5. 23.
Android Dokka를 통한 KDoc 문서화하기 정리 배경 작성된 코드를 문서처럼 팀에게 공유하고 싶을 때 Swagger처럼 가독성이 좋은 문서를 만들고 싶었습니다. 찾다보니 Android Dokka를 통해 Swagger처럼 문서화(KDoc)가 가능하다는 것을 알 수 있었고 이를 공유하고자 합니다. KDoc란 무엇일까? Kotlin 문서에서 KDoc를 다음과 같이 소개하고 있습니다. The language used to document Kotlin code (the equivalent of Java's Javadoc) is called KDoc. In essence, KDoc combines Javadoc's syntax for block tags (extended to support Kotlin's specific constructs) and Mar.. 2023. 4. 30.