본문 바로가기

Android

(9)
[adb] 안드로이드 기기에 설치되어 있는 apk 파일 추출하는 방법 apk 추출로 검색을 해보면, 안드로이드 기기에 설치되어 있는 apk 파일 추출하는데 있어서, 어떤 앱을 안드로이드 기기에 새로 설치를 하는 방법이 많이 나오는데... 나는 앱 설치고 뭐고 그냥 apk 추출을 하고 싶다. 나의 경우는, 개발용 폰을 따로 지원 받았는데 내 Google 계정 로그인 하기도 싫고(나도 쓰고, 남도 쓰고, 다 돌려쓰는 단말이기에)해서 알아 보았다. AOS 개발하는 사람들은 무조건 adb 설치되어 있을테니, 간단히 adb를 이용해서 추출하는 방법을 정리하고자 한다. 명령어는 아주 간단하게 다음과 같다. adb pull [apk 설치되어 있는 경로] [apk 추출할 경로] 문제는 안드로이드 기기에 "apk 설치되어 있는 경로"를 어떻게 아냐..인데 그건 다음 명령어를 이용하면 된다..
Android Studio .gitignore 적용 안될 때 오늘은 몇년 전 작업하던 Project를 git으로부터 받아 왔는데, 빌드가 안된다. 여차저차해서 빌드까지 되게 만든 다음에 수정사항 commit 진행하려고 했는데 다음과 같은 상황이 발생했다. 굳이 추적하지 않아야할 파일 리스트들이 들어 있는 것을 발견했다. "아, .gitignore가 제대로 안되어 있나 보네"하고 살펴보니, 왠걸 .idea/ 항목이 잘 들어가 있는것 아닌가. 구글링하다 보니 다음과 같은 내용을 발견했다. 정리하면 나랑 완전히 동일한 상황인데, git에서 이미 변화를 감지한 다음에는 해당 cache를 지워야 한다고 한다. 다음 내용을 진행하기 전에 필요한 사항들은 반드시! commit 후에 진행할 것! git rm -rf --cached . git add . git commit -m ..
Android Studio 빌드 후 자동 실행 안될 때 좋은 Clean Architecture 예제(Device Layer까지 구현되어 있는)를 찾아서, 분석한 후에 깔끔한 코드로 정리 좀 해놓으려고 Android Studio에서 New Project로 작업을 진행했다. 일단 시작은, Android Studio > File > New > New Project > No Activity (결론이지만 이놈이 문제다) 그리고 나서, File > New > New Module > Android Library 계층 별로, domain, device 영역까지 추가한 뒤에, Hilt 이용해서 DI 작업까지 완료한 뒤에 빌드까지 완료했다. 그리고 Install 빌드 후에 인스톨까지 완료되고, Studio에 노티로 "Launch succeeded"라고 뜨지만 실제로 단말에서는..
[AOS] 코틀린(Kotlin) 코루틴 채널(Channel) 코루틴 공식 페이지의 Channel 부분을 나름 번역하고 정리한 글이다. 소수 예제와 Ticker 관련 내용은 포함하지 않았다. 이후 Flow 사용하면 Channel을 따로 사용할까 싶어서인데, 이후 필요하면 내용 추가하려고 한다. 채널? 코루틴에서 채널은 BlockingQueue와 유사하다. 차이점은 Queue에서의 put 동작은 코루틴에서는 send. Queue에서의 take 동작은 코루틴에서는 receive라는 것이다. fun main() = runBlocking { val channel = Channel() launch { // this might be heavy CPU-consuming computation or async logic, we'll just send five squares for ..
[AOS] 코틀린(Kotlin) 코루틴 취소(Coroutines cancel) 코루틴이 기본적인 내용을 살펴봤으니, 이제는 코루틴 실행 취소의 타임아웃에 관해 살펴보고자 한다(이전 글). 코루틴 실행 취소 코루틴 로직 중에 어떤 작업을 하다 취소할 일이 생긴다면 어떻게 해야할까? 앞서 살펴본 launch 함수의 반환값인 Job을 이용해서 코루틴을 취소할 수 있다. fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // delay a bit println("main: I'm tired of waiting!") job.cancel() // cancels the job job.join() // waits ..
[AOS] 코틀린(Kotlin) 코루틴 기초(Coroutines basic) 코루틴에 관한 글은 많지만, 맨처음 접하게되면 이건 뭔소리지 하는 경우가 한두번이 아니다. 개인적으로 정리 한번 진행하면서 나중에 다시 살펴봤을 때, 이전에는 이해하지 못했던 내용을 더 깊이 이해할 수 있는 상황을 만들고자 한다. 일단 기본적인 내용 파악은 Kotlin Coroutine 공식 페이지를 바탕으로 하고, Coroutine 예제는 github로 진행하고자 한다. 코루틴(Coroutine) 코틀린(Kotlin)의 "코"와 코루틴(Coroutine)의 "코"는 스펠링부터 다르듯이 코틀린에서만 사용 가능한 개념이 아니다. Co + Routine의 합성어로 단어 뜻 그대로 협동 루틴으로 이해하면 된다. 코(Co)는 with 또는 together 의미이고, 루틴(Routine)은 일련의 처리 과정이다...
[AOS] ViewModel ViewModelViewModel은 Android Jetpack Architecture 구성요소의 하나로, 개발하면서는 무조건 들어볼 수 밖에 없는 MVVM 디자인 패턴의 ViewModel에서 탄생했다.많이들 MVVM에서의 ViewModel(VM)과 이 글에서 설명하고자 하는 ViewModel을 같다? 다르다? 정리한 글도 많이 찾아볼 수 있는데, 엄연히는 다른 개념이고 일반적으로는 AAC(Android Architecture) ViewModel이라고 한다.구글 개발자 사이트에서 보면, ViewModel을 다음처럼 정의하고 있다.비즈니스 로직 또는 화면 수준 상태 홀더이다.한국어 번역이라 이해가 잘 안될 수도 있지만, 간단히 말하면 ViewModel은 내부에 비즈니스 로직(repository를 통한 lo..
[AOS] ContentProvider (feat. Room) AOS 4대 컴포넌트 중에 하나인 ContentProvider에 대해 정리해보고자 한다. 대부분의 예제에서는 ContentProvider와 SQLite의 조합으로 설명하고 있는데, 로컬 데이터베이스는 SQLite에서 Room으로 변경했다. 기본 코드는 codelab Room 예제(github가 아닌 zip 파일: github는 java로 구현되어 있고, zip은 kt로 구현되어 있음)에 ContentProvider를 추가했다. Database 자, 그럼 일단 데이터베이스부터. ContentProvider에 왠 Database가 나와라고 할 수 있는데 Content+Provider는 말 그대로, 컨텐츠(정보)+제공자다. 컨텐츠(정보)라는 것이 바로 데이터베이스이다. 구글 개발자 사이트에는 다음처럼 설명하고..