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

전체 글 269

[안드로이드] adb로 딥링크를 테스트 하는 2가지 방법

1. 딥링크 URL을 직접 전달하는 방법adb shell am start -W -a android.intent.action.VIEW -d "app://open?toWebView=https://xxx.xxxx.co.kr/intro" io.github.ovso.app앱이 실행된 후 첫 화면의 intent 로부터 데이터를 받습니다.intent.data(Uri) 에 scheme, host를 포함한 모든 데이터가 들어 있습니다.intent.data.getQueryParameter("toWebView")로 데이터를 꺼냅니다.2. 추가 데이터로 딥링크를 전달하는 방법adb shell am start -W -a android.intent.action.VIEW -d "app://open" -e "toWebViewUrl"..

카테고리 없음 2024.08.20

[IntelliJ] 브레이크 포인트 성능

버깅(브레이크 포인트) 중에 인텔리J가 멈추거나 느려질 때가 있습니다. 디버깅 성능을 개선하는 방법을 젯브레인에서 소개하고 있습니다. 필자는, 코틀린으로 개발할 때 익스프레션 바디, 람다에서 메서드 브레이크포인트를 사용할 때 IDE가 멈춘적이 있습니다. 라인 브레이크포인트를 사용하니 해결됐습니다. 다른 설정을 사용해 보진 않았지만, 메서드 브레이크포인트를 사용하지 않음에도 성능이 좋지 않다면 젯브레인이 권하는 다른 방법을 시도해 보시길 권해드립니다. ・ 메서드 브레이크포인트: JVM 설계로 인해 성능이 크게 저하되므로, 일반적인 라인 브레이크포인트를 사용하는 것이 좋습니다.・ 메서드 반환 값 표시 옵션: 비활성화하면 성능이 향상됩니다.・ 컬렉션 클래스 대체 보기 및 toString() 객체 보기:toSt..

카테고리 없음 2024.05.23

[안드로이드] 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

호밀밭의 파수꾼 / 제롬 데이비드 샐린저 / 공경희 / 민음사

소싯적.. 고전독서모임에서 읽었던 이 책. 내용이 머릿속에서 지워졌다. 그래서 다시 읽었다. 19개월 된 둘째를 키우며 읽었다. 야무지게 읽었다. 낮과 밤에 재우면서, 품에 안고, 탕목욕 시키며, 첫째와 놀때 돌보며 읽었다. 어린아이들의 부모는 따로 시간내어 독서를 할 수 있는 사람들이 아니다. 이상했다. 소식적엔 무얼 본건지 몰랐을 정도로 내용 이해가 어려웠다. 그러나 지금은 다르다. 틈새독서 하는 중에도 많은 부분이 이해가 됐다. 심지어 후반부의 어떤 내용은 유치하다는 생각까지 했다. 지금의 독서와 그 때의 독서는 다르다. 그 때는 의무감 때문에 읽었으나 지금은 의무감이 없다. 책의 골자를 뽑아봤다. 제목이 `호밀밭의 파수꾼`인 이유는 무엇일까? 여동생 피비 콜필드가 오빠인 주인공(홀든 콜필드)에게 ..

일반서적 2022.09.09

[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