안드로이드

    Flow 재요청 버튼 활용하기

    개요 Android App의 Flow API 사용 중 오류 발생 시 버튼을 통해 재 요청이 가능하도록 기능 구현 중 이었다. 그러나 재 요청 버튼 클릭 시 로그상으로 2회 이상 응답을 받아오는 현상이 발생했고, 이를 어떻게 수정했는지 공유하고자 한다. 먼저, 구현부를 살펴보겠다. viewModel에서 이미지 목록을 요청하는 코드인데, imageFlow 요청 실패 시 Error UI가 보여지고, Error UI의 버튼 클릭 시 fetchImageList() 함수를 수행하도록 했다. class MainViewModel @Inject constructor( private val gettyRepository: GettyRepository ): ViewModel() { val isLoading: MutableLi..

    A problem occurred configuring root project 'Unscramble'.> Could not resolve all files for configuration ':classpath'. 오류해결

    개요 android codelab (https://developer.android.com/codelabs/basic-android-kotlin-compose-viewmodel-and-state?hl=ko#2) 수행 중 android studio 버전 업데이트가 필요하다는 메세지를 보고 업데이트 수행 (dolphin -> flamingo) 이후 codelab 소스코드 Gradle project sync 실패 Compose의 ViewModel 및 상태 | Android Developers 이 Codelab에서는 아키텍처 구성요소 중 하나인 ViewModel을 사용하는 방법을 알아봅니다. 구성 변경 중에 앱 상태를 유지하도록 ViewModel을 구현합니다. developer.android.com 해결방법 ht..

    manifestPlaceholders가 값을 찾지 못할 때 해결방법

    개발 도중 manifestPlaceholders를 통해 카카오 앱 키를 local.properties 파일에서 읽어오는 기능이 필요했는데 매니페스트에서 읽을 때에만 정상적으로 읽지 못해서 카카오맵이 정상적으로 보이지 않는 이슈가 있었다. 원인은 매우 간단했는데, local.properties에서 선언한 앱키를 따옴표 없이 감싸준 이후 정상동작 했다. 아래는 참고 할만한 코드를 공유 해본다 // build.gradle Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def KAKAO_API_KEY = properties.getPrope..

    Android 앱에서 블루투스 마우스 커서 숨기기

    Android 장치에 블루투스 마우스 장치를 연결하면 화면에 마우스 커서가 표시됩니다. 이 커서를 Android 7.0 이상부터 커서를 숨기거나, 모양을 바꿀 수 있게 되었습니다. 필자의 경우 마우스 커서를 숨기는 기능에 사용했었는데, 이때 사용한 코드를 공유합니다. 블루투스 마우스 커서의 경우 setPointerIcon 메서드를 호출한 뷰 계층에서는 마우스 커서 모양이 변경되는것으로 보이며, 시스템 UI위에서는 기본 마우스 커서가 보이게 됩니다. 아래는 제가 사용했던 코드 일부를 공유합니다. @Override public boolean dispatchGenericMotionEvent(MotionEvent motionEvent) { int index = motionEvent.getActionIndex()..

    Duplicate class a.a.a.a found in modules 오류

    SDK 외부 배포 시 발생한 오류이며 배포한 SDK의 proguard 옵션 설정으로 오류 해결 가능하다. 오류의 원인은 proguard 설정에서 패키지명, 클래스명이 난독화되면서 a.a.a.... 처럼 알파벳 순서대로 패키지명이 생성된다. 이 때 내가 배포한 SDK를 사용하는 유저가 사용하는 다른 라이브러리에서도 이러한 기본 난독화 패키지명을 사용할 경우 두 SDK의 패키지명, 클래스명이 모두 a.a... 등으로 표시되면서 클래스를 찾지 못하게 된다. 이 때 프로가드에서 flattenpackagehierarchy 옵션을 통해 기본 패키지명 앞에 식별가능한 prefix 패키지명을 붙일 수 있다. -flattenpackagehierarchy "com.hyeonwoo.handsome" 이 프로가드 설정은 co..

    [Android Studio] Android Studio IDE에서 이미지 리소스 쉽게 얻기

    개요 안드로이드 스튜디오 IDE에서 쉽게 아이콘 이미지를 얻어오는 방법을 찾아서 포스팅합니다. 저같은 경우 주로 사용되는 픽토그램 이미지를 https://material.io/ 사이트를 자주 이용했었는데요, IDE 내에서도 쉽게 이미지 리소스를 검색하고 프로젝트에 적용할 수 있는 좋은 방법이 있습니다. Material Design Build beautiful, usable products faster. Material Design is an adaptable system—backed by open-source code—that helps teams build high quality digital experiences. material.io 먼저 안드로이드 스튜디오 상단 바의 Tools > Resource..

    [Android] ExoPlayer2 PlayerControlView가 일정시간 후 사라질 때

    ExoPlayer2의 PlayerControlView가 일정시간이 지난 후 사라지는 현상이 있었다. 원인은 매우 간단했는데, 버그로 판단해서 버전도 변경해보고 여러가지 시도를 했었다. xml 파일의 PlayerControllerView에 아래의 코드를 추가시켜준 후 문제가 발생하지 않았다. app:show_timeout="0" Reference : https://stackoverflow.com/questions/51579006/exoplayer-show-playercontrolview-throughout-playback-of-audio-clip

    [Android] 디버깅 중 크래시로 종료되었을 때 로그 보는법

    안드로이드 앱 개발 중 JNI측에서 발생한 크래시의 경우 크래시가 발생하면서 앱이 종료되고 다시 시작되는데, 이 때 크래시가 발생한 순간의 로그를 안드로이드 스튜디오 로그캣에서 확인할 수 없을 때가 있다. 이 로그를 확인하는 방법을 간단하게 알아보자. 1. 로그를 추출할 기기가 연결하기 2. adb shell bugreport > [로그저장위치][log.txt] 텍스트파일을 확인하면 JNI측에서 발생한 로그를 확인할 수 있다.

    [Android Studio] 안드로이드 프로젝트 병합, 한 프로젝트에서 빌드 변형 구성(Flavor)

    기존 안드로이드 프로젝트에서 free, paid Version 구성 또는 인앱 결제 모델, 구독 결제 모델을 나누는 방법으로 좋은 Flavor에 대해서 알아보겠습니다 ㅎㅅㅎ Flavor란 무엇일까? Flavor이란 Gradle에서 제공하는 옵션으로, Flavor를 통해 한 프로젝트에서 여러개의 빌드 버전을 생성할 수 있습니다. 필자는 안드로이드 개발 중 구독, 인앱 결제를 제외하고 같은 기능을 수행하는 프로젝트를 병합하기 위해 사용했습니다. Flavor를 통해 여러 빌드를 생성하는 방법 applicationIdSuffix는 프로젝트 패키지 마지막에 설정될 이름을 설정할 수 있습니다. 이 옵션을 통해 구글 플레이에 각각 다른 패키지 명으로 앱을 추가할 수 있습니다. manifestPlaceHolder는 A..

    [Android] Json to Kotlin 플러그인 사용하기

    Rxjava와 MVVM 패턴을 사용한 영화 앱 강의를 듣던 중 유용해 보이는 플러그인을 발견해서 소개하려고 합니다. 플러그인 이름에서 볼 수 있듯이 Json 형식의 문자열을 코틀린 데이터 클래스로 쉽게 변환 해준다고 하네요. 간단한 사용법을 이미지와 함께 소개하겠습니당 ^0^ 먼저 안드로이드 스튜디오 실행 후 File > Settings > Plugins 항목에서 json to kotlin 검색하여 설치하면 아래와 같이 새로운 파일 생성 시 "Kotlin data class File from JSON" 항목을 선택할 수 있습니다. 선택 후 Json 형식의 텍스트를 붙여넣기 해준 후에, 오른쪽 상단의 포맷 버튼을 눌러주면 붙여넣기로 인해 줄바꿈이 되어 있지 않던 Json 형식의 데이터가 보기좋게 정리됩니다..