반응형

Android 23

ACTION_HOVER_EXIT 에러 해결과 Material3 Slider UI 유지하기

문제 발견: 마우스 스크롤 시 발생하는 크래시Android 프로젝트에서 Jetpack Compose를 사용하던 중, 마우스 스크롤을 사용할 때마다 다음과 같은 에러가 지속적으로 발생했습니다.Process: device.apps.pmbackup, PID: 12344java.lang.IllegalStateException: The ACTION_HOVER_EXIT event was not cleared. at androidx.compose.ui.platform.AndroidComposeView.sendHoverExitEvent$lambda$5(AndroidComposeView.android.kt:565) at androidx.compose.ui.platform.AndroidComposeView.$r..

Android 2025.11.18

구글 앱 아키텍처 vs 클린 아키텍처 차이점

구글의 공식 입장구글은 Now in Android 깃허브 저장소를 통해 "앱 아키텍처와 클린 아키텍처는 다르다"는 명확한 입장을 밝혔습니다. 두 아키텍처의 공통 원칙앱 아키텍처와 클린 아키텍처 모두 다음 핵심 원칙을 공유합니다:1. 관심사의 분리 (Separation of Concerns) : 각 레이어가 명확한 책임을 갖도록 분리2. 의존성 주입 (Dependency Injection) : 모듈 간 결합도를 낮추고 테스트 용이성 확보3. 단방향 데이터 플로우 (Unidirectional Data Flow) : 예측 가능한 상태 관리를 위한 UDF 패턴 적용 구글 앱 아키텍처의 특징레이어 구성UI Layer: UI 컴포넌트와 ViewModel을 함께 포함Domain Layer: 선택적 레이어 (없어도 무..

Android 2025.11.09

Android dispatchKeyEvent 동작 차이: EditText vs WebView 키 이벤트

Android 앱 개발 시 dispatchKeyEvent(KeyEvent) 함수의 동작은 컴포넌트 유형에 따라 다르게 작동합니다. 이 글에서는 EditText와 WebView에서 Ctrl+V 붙여넣기 이벤트가 어떻게 다르게 처리되는지 상세히 알아보겠습니다. 주요 차이점 요약EditText에서는 프로그래밍 방식으로 생성한 KeyEvent가 false를 반환하며 붙여넣기가 작동하지 않지만, WebView에서는 동일한 이벤트가 true를 반환하며 정상적으로 붙여넣기가 가능합니다.1. EditText(AppCompatEditText)에서의 키 이벤트 처리EditText는 네이티브 Android View로서 키 이벤트를 검증하는 과정을 거칩니다.EditText 내부 처리 로직// Android 내부 EditTex..

Android 2025.10.28

클립보드를 활용한 복사 붙여넣기 기능 (안드로이드 코틀린)

Android Kotlin에서 ClipboardManager와 KeyEvent로 자동 복사 붙여넣기 구현하기개요Android 네이티브 앱 개발 중 String 데이터를 클립보드에 복사하고 자동으로 붙여넣기하는 기능을 구현해야 할 때가 있습니다. 이 글에서는 ClipboardManager와 KeyEvent를 활용한 자동 붙여넣기 구현 방법을 소개합니다.시스템 앱 vs 일반 앱의 붙여넣기 구현 방식시스템 앱시스템 권한이 있는 앱의 경우 InputManager.injectInputEvent() API를 사용하여 현재 포커스된 입력 필드에 직접 이벤트를 주입할 수 있습니다.일반 앱일반 앱에서는 Activity.dispatchKeyEvent() API를 통해 KeyEvent를 전달하는 방식으로 클립보드 붙여넣기 ..

Android 2025.10.21

pk8, pem 파일을 jks로 변경하는 방법(Android)

Android APK 서명 .pk8 및 .pem에서 .jks로의 변환 과정 안드로이드 앱 개발 과정에서 APK 서명은 앱 배포의 필수적인 단계입니다. 이번 포스트에서는 .pk8 및 .pem 파일을 사용하여 APK에 서명하는 과정과, 중간에 발생한 에러 해결 방법까지 상세하게 다루려고 합니다. 1. 서명 파일 변환의 필요성 대부분의 안드로이드 개발자는 Android Studio에서 제공하는 기본 .jks 형태의 키스토어 파일을 사용합니다. 하지만 때때로 .pk8 및 .pem 파일만을 가지고 있어서, 이를 .jks 형태로 변환해야 하는 상황이 발생합니다. 2. 변환 과정 단계 1: PKCS12 형식으로 변환 첫 번째 단계는 .pk8 개인 키와 .pem 공개 키를 PKCS#12 형식으로 변환하는 것입니다. 이..

Android 2024.03.27

Android Emulator System uid App 빌드하기

안드로이드 애뮬레이터를 사용해서 시스템 앱으로 설치해서 테스트 해보고 싶은신적 있으신가요? 저희 회사는 안드로이드 단말기를 생산하는 회사라서 대부분 시스템 앱으로 빌드하여 배포합니다. 그래서 애뮬레이터에서 시스템 앱으로 돌리려고 삽질을 좀 했습니다. 1. 애뮬레이터 설치 애뮬레이터 설치 부터 신경써야 합니다. 아래 그림과 같이 Target 정보에 Google APIs 가 아닌 이미지를 선택해야 합니다. 그래야 AOSP 오픈소스에서 제공하는 platform key를 사용하여 apk를 시스템 앱으로 설치할수 있습니다. 2. 매니패스트의 system uid 입력 아래와 코드를 매니패스트 최상단의 입력되어야, 시스템 앱 권한으로 앱이 실행이 됩니다. 3. apk sign 애뮬레이터를 설치했다면 APK를 시스템 ..

Android 2024.03.26

repo init mirror 옵션 vs reference 옵션 차이

repo init 명령어에서 mirror 옵션과 reference 옵션이 있습니다. 두 옵션의 차이를 알아보아요. repo init --mirror는 git 저장소의 모든 브랜치와 태그를 그대로 복제하고, 원격 저장소와 동기화할 수 있는 옵션입니다. repo init --reference 는 이미 로컬에 있는 다른 저장소를 참조하여 필요한 데이터만 복제하고, 원격 저장소와 동기화할 수 없는 옵션입니다. 이렇게 하면 네트워크 트래픽과 저장 공간을 절약할 수 있습니다. 예를 들어, 다음과 같은 명령어를 실행하면 repo init --mirror -u {1} repo init --reference=/data/dtx340 -u {2} 위와 같이 명령어가 있을때, 첫 번째 명령어는 {1} 에 있는 모든 git 저..

Android 2024.01.31

Activity orientation 상황에서 액티비티 재생성 방지

안드로이드 어플을 개발하다보면, 화면을 회전할 경우 액티비티를 없애고, 액티비티를 다시 그립니다. 그런데 회사에서 요청한 요구사항에 맞게 개발하다보면 액티비티를 다시 그리지 않고, 그대로 사용해야할 경우가 있습니다. 이걸 매니패스트 정의만하면, 액티비티 재생성을 막아주는 코드가 있어서 공유 합니다. 1. 코드 매니페스트에 'android:configChanges' 에다가 액티비티 재생성을 무시하고 싶은 경우를 넣어주면 됩니다. 이 속성을 추가하면 액티비가 재생성 되지는 않지만, 화면 회전시 화면을 회전하여 그려줍니다. 2. 안드로이드 공식 문서 참고 ▶안드로이드 공식 문서, 액티비티 재생성 방지

Android 2023.06.10

안드로이드 해시키 구하는 방법, 카카오 API

android 네이티브 앱 개발시에 카카오 API 를 이용하게 되면 '키 해시' 값을 요구 합니다. 카카오 API 뿐만 아니라 여러 소셜 API 에서 요구 하는 경우가 많이 있습니다. ​ '키 해시' : 앱의 사이닝 키 시그니처(Signing key signature)를 해시한 값 따라서 API를 호출한 서버는 등록된 '키 해시' 와 네이티브 앱 키가 매치 하는지 비교하여 악성 앱을 판별 합니다. 따라서 '키 해시'를 등록해주기 위해서 추출 하는 방법은 2 가지가 있습니다. 1. java의 keytool 명령어를 CMD 창에 입력하여 얻을수 있습니다. 이 방법은 익숙하지 않으신 분들은 조금 복잡 할수 있습니다. 2. 앱 내의 java 소스로 '키 해시'를 로그캣의 출력하여 확인 할수 있습니다.(추천) ​..

Android 2021.04.12

BaseObservable을 이용한 inverseBinding

식별 가능한 데이터 객체 작업 | Android 개발자 | Android Developers 식별 가능성은 객체가 데이터 변경에 관해 다른 객체에 알릴 수 있는 기능을 의미합니다. 데이터 결합 라이브러리를 통해 객체, 필드 또는 컬렉션을 식별 가능하게 만들 수 있습니다. 간단한 기 developer.android.com 1. dataBinding 설정 build.gradle(app) 에서 dataBinding을 설정 합니다. dataBinding { enabled = true } 2. kotlin-kapt 설정 코틀린으로 사용하실 경우 build.gradle(app)의 아래 설정도 추가해 주어야 합니다. apply plugin: 'kotlin-kapt' 3. BaseObservable 설정 Model 클..

Android 2021.02.11
반응형