방대한 문서보다 동작하는 소프트웨어

개발 53

[안드로이드] hiltAggregateDepsDebug 에러

에러 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:hiltAggregateDepsDebug'. > A failure occurred while executing dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction > 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()' ... .. 해결책 // 모듈 수준의 build.gradle hilt { enableAggregatingTask = false } 원인 최신버전(2.50)의 dagger-compiler 는 내부에..

개발 2024.02.14

[안드로이드] adb로 에뮬레이터, 디바이스 제어하기

에뮬레이터와 디바이스를 제어하기 위한 KEYCODE 가 정말 많아요 : ) adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_POWER adb shell input keyevent KEYCODE_APP_SWITCH adb shell input keyevent KEYCODE_ASSIST adb shell input keyevent KEYCODE_MUTE adb shell input keyevent KEYCODE_MUSIC adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_CALENDAR adb shell input keyevent KEYCODE_BRIGH..

개발 2023.11.28

[안드로이드] Android Studio 에서 커서가 두껍게 나올 때

갑자기 커서가 두꺼워진 적 있나요? 저는 플러그인으로 설치한 IdeaVim(vim) 때문이었답니다. 플러그인과의 충돌인 것 같아요. vim 이 disable 이었는데도 두꺼워 졌으니까요. vim을 enable 로 했다가 다시 disable 로 하니 괜찮아졌어요. 잠시.. 해결법으로 설정(⌘ + ,) > Plugin 에서 vim 을 disable 하니 커서가 정상으로(|) 돌아왔어요. 설치만 하고 쓰질 않으니 그냥 지워야 겠어요. 물론 vim 에서 두꺼운 커서는 읽기모드 에요.

개발 2023.11.08

[안드로이드] 라이브러리 업그레이드가 안될 때

라이브러러 업데이트가 안되는 상황 라이브러리 또는 오픈소스 버전을 업그레이드(10.0.6 -> 11.0.1) 했는데 External Libraries에선 여전이 10.0.6 을 가리키고 있을 때가 있습니다. (가끔 혹은 처음 / 회사 또는 개인) 로컬 Gradle 캐시를 의심해 봐야 합니다. 재밌는 것은(당사자는 노잼), 동료들은 괜찮은데 나만 그렇다는 겁니다. 해결하기(결론) 해당 안드로이드 프로젝트 디렉토리가 아닌 외부에 숨겨진 .gradle 에서 해당 라이브러리 캐시를 찾아서 관련 파일을 모두 제거후에 빌드 해야 합니다 경로는, /Users/{유저명}/.gradle/caches/ 입니다. 안.스의 External Libraries -> Gradle:{라이브러리 namespace} -> 커서메뉴(마우..

개발 2023.10.05

[안드로이드] ADB 로 앱 실행하기

adb 로 앱을 실행하는 것은 아주 간단합니다 : ) adb shell am start -n /. 위의 가이드를 아래와 같이 바꾸어 썼습니다. adb shell am start -n io.github.ovso/io.github.ovso.ui.SplashActivity 여기서, Flavor 를 통해 빌드변형을 했다면 어떻게 실행해야 할까요? adb shell am start -n io.github.ovso.stg/io.github.ovso.ui.SplashActivity / 의 앞부분만 stg 를 붙였습니다. / 이후는 실제 경로를 그대로 유지해야 합니다. 물론 실제 경로에 stg가 붙으면 / 앞부분과 동일하게 경로를 적어주면 됩니다. 그리고 / 전 후로 많이 다른 경우가 있을 수 있지요? 그럴 땐 아래와..

개발 2023.08.23

[안드로이드] ADB 로 액티비티 스택 알아보기

1. adb shell dumpsys activity recents 2. adb shell dumpsys activity activities 1번 과 2번 둘다 Activity 스택 정보를 보여줍니다. 1번은, recents 로 눈치 채셨을 수도 있습니다. 최근에 사용한 Activity 정보를 보여줍니다. 2번는, 방대한 정보를 보여줍니다. 방대하니까 보기가 어렵습니다. 정보의 범위를 좁혀볼까요? 아래와 같이 packageName 을 CLI에 추가해 줍니다. 1. adb shell dumpsys activity recents | grep io.github.ovso.activityfinish 2. adb shell dumpsys activity activities | grep io.github.ovso.a..

개발 2023.07.29

[안드로이드] Wireless Debugging 이 안될 때

GUI 로 하는 Wireless Debugging(무선디버깅) 이 안될 때 아래의 CLI 를 이용하면 잘 됩니다. 물론, 동일한 Wi-Fi 에 연결되어 있어야 하겠죠! adb connect device_ip_address:port 이 방법은, QR 코드로 기기 페어링(Pair device with QR code) 또는 페어링 코드를 사용하여 페어링(Pair device with pairing code) 이 동작하지 않을 때 유용합니다. 개인적인 경험으로, 둘 중 하나가 안되면 모두 안됐습니다. device_ip_address 와 port 는 개발자 모드의 Wireless Debugging 에서 확인할 수 있습니다. 다른 방법도 있습니다. 그러나 권장하지 않습니다. adb pair device_ip_add..

개발 2023.07.17

[안드로이드] Kotest 사용

Kotest 사용 안드로이드에서 Kotest 를 사용하려면 3 가지 설정이 필요합니다. 안드로이드 스튜디오 플러그인 설치 라이브러리 추가 JUnit Platform 그래들 플러그인 추가 안드로이드 스튜디오 플러그인 Kotest 에서 만든 플러그인 입니다. 안드로이드 스튜디오에서 플러그인을 검색하여 손쉽게 설치 할 수 있습니다. 라이브러리 추가 dependencies { ... testImplementation("io.kotest:kotest-runner-junit5:$version") ... } JUnit Platform 그래들 플러그인 추가 앱 수준의 build.gradle 에 플러그인을 추가합니다. android.testOptions { unitTests.all { it.useJUnitPlatform..

개발 2023.03.15

[코틀린] 이메일 유효성 검사 정규표현식

이메일 유효성 검증 로직 입니다. 유용하게 사용하시기 바랍니다. import java.util.regex.Pattern fun isValidEmail(email: String): Boolean { val pattern = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$") return pattern.matcher(email).matches() } fun main() { val email = "example@example.com" if (isValidEmail(email)) { println("Valid email address") } else { println("Invalid email address") } }

개발 2023.02.10

[Git] 깃 로컬 브랜치 경로 바꾸기

현재 사용 중인 깃 브랜치의 경로를 바꿔야 할 때가 있습니다. 브랜치 경로를 잘못 설정했거나, 단순 변경 할 때 입니다. 필자는, 브랜치의 depth 를 줄이기 위해서 사용했습니다. git branch -m {현재경로} {바꿀경로} git branch -m feature/qa/1101 feature/1101 도움말을 보면 이해하기가 좀 더 수월합니다. copy 를 의미하는 -c 옵션을 사용하면 복제가 됩니다. git help branch ... git branch (-m | -M) [] git branch (-c | -C) [] ... OPTIONS -m, --move move/rename a branch and its reflog -M move/rename a branch, even if target ..

개발 2022.12.16

[GIT] 깃 브랜치 다이어그램 템플릿

템플릿 위와 같은 깃 브랜치 다이어그램을 본적이 있으신가요? Diagrams.net 에서 사용할 수 있는 XML 형태의 템플릿입니다. XML 주소는 아래와 같습니다. https://gist.githubusercontent.com/bryanbraun/8c93e154a93a08794291df1fcdce6918/raw/bf563eb36c3623bb9e7e1faae349c5da802f9fed/template-data.xml 사용법 Diagrams.net 에서 새 문서를 만듭니다. 파일 > 열기 > URL.. XML 주소를 입력합니다. 팀에 맞게 재정의 합니다. 참고 Example Git Branching Diagram

개발 2022.12.08

[안드로이드] Compose 바텀시트에서의 스크롤 문제

커스텀 BottomSheetDialogFragment 안에 ComposeView 를 선언하고 스크롤 가능한 리스트를 표출해야 할 때가 있습니다. 이 때 스크롤에 문제가 발생합니다. 아래로 스크롤 하면 바텀시트도 함께 내려가는 현상입니다. 필자는, 커스텀 BottomSheetDialogFragment 내에 검색을 위한 BasicTextField 를 상단에, 검색 결과를 표출하는 LazyColumn 을 하단에 배치하여 개발하면서 스크롤 문제 겪었습니다. 이 현상을 해결하기 위해선 rememberNestedScrollInteropConnection API 를 사용해야 합니다. 수정자에 API를 선언해 주기만 하면 쉽게 해결할 수 있습니다. HTML 삽입 미리보기할 수 없는 소스 rememberNestedScr..

개발 2022.11.17

[Git] stash 사용법

여러 작업을 동시에 진행하면 stash 와 같은 임시 저장소가 필요합니다. 가령, 🔼 A 작업 중에 B 작업을 잠시 하게 되면서 A작업을 commit 하기 모호할 때 사용합니다. 🔼 또는 테스틀 위해 유틸성으로 어떤 부분을 stash 로 저장해 놓을 수 있습니다. 저장하기 $ git stash 또는 git stash save 모든 변경사항이 stash 의 첫 번째 항목으로 저장됩니다. 리스트 보기 $ git stash list 불러오기 불러오면서 지워집니다. $ git stash pop // 첫 번째 항목을 불러옵니다. git stash pop 0 과 동일합니다. $ git stash pop 2 $ git stash pop stash@{2} 불러오면서 지워지지 않습니다. $ git stash apply ..

개발 2022.11.09

[안드로이드 컴포즈] 한 화면에서 BottomSheet 여러개 사용하기

컴포즈에선 ModalBottomSheetLayout 을 사용해 BottomSheet를 구현합니다. 이 때 ModalBottomSheetState 는 필수입니다. BottomSheet의 상태(show, hide)를 제어하는 부분이기 때문입니다. 우리는, 한 화면에서 서로 다른 BottomSheet를 여러개 사용하면서 ModalBottomSheetState 를 여러개 선언하여 사용하는 실수를 할 수 있습니다. ModalBottomSheetState 를 하나만 사용하기 위해선 ModalBottomSheetLayout의 sheetContent 안에 조건을 넣어 UI 를 구성해 주면 됩니다. { val scope = rememberCoroutineScope() val (selected, setSelected) =..

개발 2022.11.04

[안드로이드] Android Studio Preview 설정을 빠르게 하기

Android Studio 와 Android Studio Preview 를 사용할 때 사용중이던 IDE 의 설정을 불러오게 된다면 빠르게 개발환경을 구성할 수 있습니다. 사용중이던 모든 설정이 반영될 뿐 아니라, 플러그인도 설치됩니다. 때문에 설정에 대한 스트레스가 사라집니다. Android Preview 실행 Android Studio 와 Android Studio Preview 를 함께 사용할 때가 있습니다. Preview 를 설치하게 되면 최초 설정을 어떻게 할지 묻는 팝업이 나옵니다. 둘 중 하나를 고를 수 있습니다. 🔘 Config or installation directory 🔘 Do not import settings 설정 반영 Config or installation directory 옵션..

개발 2022.10.28

[플레이스토어] 스토어 그래픽, 스크린샷 이미지 만들기

구글플레이스토어에 앱을 등록하자면, 1024 x 500 사이즈의 그래픽 이미지가 필요합니다. 이미지를 생성하기에 유용한 사이트를 소개합니다. Online Graphic Generator 규격이 정해져 있습니다. 때문에 쉽습니다. 다만, 커스텀에 많은 제한이 있으니, 커스텀을 원하지 않는다면 적극 추천합니다. https://www.norio.be/graphic-generator/ Photopea 포토샵의 경량화 버전이라는 생각이 듭니다. 많은 템플릿을 제공합니다. https://www.photopea.com/ Screenshot https://studio.app-mockup.com/

개발 2022.10.03

[안드로이드] 메모리 덤프 해봤다

메모리 덤프란? 사전적 의미 (특히 적절치 않은 곳에 쓰레기 같은 것을) 버리다, ~을 (~에게) 떠넘기다 과학사전의 의미 컴퓨터 주기억장치와 레지스터에 기억시킨 내용을 보조기억장치에 복사하는 조작. 코어덤프의 준말이다. 개발에서의 의미 메모리 덤프는 RAM의 모든 정보 내용을 가져 와서 저장소 드라이브에 쓰는 프로세스를 말한다. 메모리 덤프하기 메모리를 덤프하는 목적은 다양하다. 필자는 보안취약점을 해결하기 위해 MAC에서 메모리를 덤프했다. 루팅은 윈도우 OS에서 진행했다. 전제조건(Precondition) 메모리를 덤프하려면 반드시 단말을 루팅해야한다. 물론 루팅을 하지 않고 진행할 수도 있다고 한다. 다만, 덤프 정보가 제한적이다. 루팅 개요 루팅은 윈도우 OS에서 진행했다. MAC에서 진행하는 ..

개발 2022.10.03

[Git] Revert 명령어로 되돌리기

되돌리기 아래는, Revert 하는 방법입니다. 물론 기록이 남습니다. 구성원에게 공유할 수 있기에 Revert 를 권합니다. git revert 4dc7433257..f96f093879 git revert {오래된 해시값}..{최근 해시값} mainline 관련 에러가 나올 때는 다른 옵션과(-m 1) 함께 revert 명령어를 사용해 주면 잘됩니다. git revert -m 1 4dc7433257..f96f093879 .. 은 범위 입니다. 범위가 필요하지 않다면 단일 해시값으로 되돌리기가 가능합니다. git revert 4dc7433257 해시값 보기 revert 를 하기 위해선 먼저 해시값을 알아야 합니다. -1은 마지막에 커밋한 내용을 볼수 있습니다. 해시값 전체가 나옵니다. -2 를 하다면 최..

개발 2022.09.07

[안드로이드] 코틀린, 컴포즈 최신버전 빌드 에러 해결, Compose compiler

에러 This version (1.2.0-rc02) of the Compose Compiler requires Kotlin version 1.6.10 but you appear to be using Kotlin version 1.7.10 which is not known to be compatible. Please fix your configuration (or suppressKotlinVersionCompatibilityCheck but don't say I didn't warn you!). 코틀린과 컴포즈의 최신버전을 사용하려는데 위와 같은 빌드에러가 나타났습니다. 원인 원인은, kotlinCompilerExtensionVersion 과 관련이 있습니다. 코틀린이나 컴포즈를 최신버전으로 사용하고자 할..

개발 2022.07.17

[안드로이드] Android Studio 의 유용한 기능

Android Studio 에는 유용한 기능이 많습니다. 저도 여러가지 기능을 사용하고 있지만, 평소에 사용해보지 못한 기능을 나열해봤습니다. 스크래치 파일 Playground 와 비슷한 기능입니다. 형식에 구속받지 않고 빠르게 실행해볼 수 있습니다. https://www.jetbrains.com/help/idea/scratches.html Scratch files | IntelliJ IDEA www.jetbrains.com 변경 사항이 있는 모듈 표시 변경 사항이 있는 모듈을 파란색으로 표시해줍니다. 패키지가 파랗게 변합니다. `전기뱀장어` 버전부터는 기본설정이 ON 입니다. Preferences-> Version Control-> Show directories with changed descenden..

개발 2022.06.21

[안드로이드] logcat, pidcat

필자는 pidcat 을 오래 썼다. 습관이 될 정도였다. 그러나 맥OS를 12.3.1 로 업데이트 한 후로 pidcat이 동작하지 않는다. pidcat은 python2 를 사용하지만 맥 OS가 이전에 존재 했던 python2 를 제거하고 python3 를 설치했기 때문이다. 문제는 여기서 그치지 않는다. pidcat 을 커스텀하여 python3 로 동작하게 만들어서(어떻게??) 사용한 사람들은, python3 로 pidcat을 동작시켜도 필터링이 안된다고 주장하고 있다. 필터링이 안되는 `로그 출력기`를 누가 사용하겠는가. 내가 알지 못하는 현자들이 pidcat 제작자에게 issue를 제기하고 PR 을 요청했으니 기다리는 수밖에.. 그러나 제작자는 반응이 없다. 필자는 일단 기본으로 돌아가기로 했다. 쓸..

개발 2022.04.25

[터미널] cURL 을 써보자

cURL(client URL) 은 API를 빠르게 호출하고자 할 때 유용하다. 상황에 따라서 PostMan과 같은 API 호출 앱보다 빠를 수 있다. 물론 Swagger 가 있다면 굳이 사용할 필요는 없다. 항상 Swagger 가 존재한다는 보장이 없으니, 자주 사용하는 cURL 명령어는 익혀 두는 게 편할 것 같다. GET curl -H 'X-Auth-Token: token..' \ -X GET \ https://api-xxxx.co.kr/user POST curl -d 'name=jaeho&age=20' \ -X POST / https://api-jaeho.co.kr/user \ 는 개행을 뜻한다. -X GET, -X POST 는 생략 가능하다. -d 가 있느냐 없느냐로 POST 와 GET을 구분하는..

개발 2022.04.16

[안드로이드] Android Studio 필수 설정, 플러그인, 단말설정, 도구

필수 설정 메모리 설정 A.S 를 실행하는 JVM(Java Vertual Machine)은 미리 정의된 메모리 양을 할당한다. 기본값은 플랫폼에 따라 다르지만, 이는 안드로이드 앱을 개발함에 있어 대부분 부족하다. 때문에 속도가 느려지기 전에 메모리 힙을 늘려 사용하는 것을 권장한다. 그렇지 않으면 미리보기 화면을 렌더링 하는 중에 A.S 가 먹통이 될 수 있다. 필자는 12GB를 할당한다. -Xmx12288m Help > Custom Editor VM Options... > studio.vmoptions(파일) 에서 설정 가능하다. 최신라이브러리 체크 비활성화(Lint) Preferences -> Editor -> inspections -> NewerVersionAvailable 비활성화 시키는게 좋습..

개발 2022.04.08