안드로이드
[안드로이드] 프리아 컬렉션 프로젝트 - 1
이 프로젝트는 무엇인가요? 이세계 아이돌처럼 가상세계 버츄얼 아이돌 그룹의 프리아를 유튜브 알고리즘을 통해서 알게 되었습니다. 신생 그룹이여서 이세계 아이돌처럼 관련된 어플리케이션이 많이 없었습니다. 그래서 맴버들의 최신 유튜브, 최신 틱톡등 모아볼 수 있는 어플리케이션을 만들어볼려고 이 프로젝트를 할려고 합니다. 사용된 라이브러리 먼저 Compose를 사용할려고 합니다. Compose는 코드 수를 확 줄일 수 있으며, XML을 사용하지 않고 kotlin으로 개발할 수 있는 장점이 있습니다. 그리고, Hilt를 사용할 예정입니다. Hilt는 아키텍쳐를 설계할 때 쉽게 설계할 수 있도록 도와주는 라이브러리입니다. 그 외 라이브러리는 프로젝트를 진행하며 추가할 것입니다. 프로젝트 진행사항 1. Figma로 ..
[안드로이드] 클린 아키텍처? MVVM? MVP?
클린 아키텍처는 MVVM MVP 아닌가요? 나는 클린 아키텍처가 MVVM, MVP를 적용한 프로젝트를 뜻한 줄 알았다. 반은 맞고 반은 틀린 말이라는 것을 알게 되었고 그 내용을 정리할려고 한다. 클린 아키텍처와 디자인 패턴(MVVM, MVP, MVI 등) 클린 아키텍처와 디자인 패턴은 모두 유지 관리 및 확장 가능한 시스템을 만드는데 사용되는 개념이다. 클린 아키텍쳐는 외부 프레임워크 및 라이브러리로부터 소프트웨어 시스템의 분리와 독립성을 강조하는 소프트웨어 철학이다. 디자인 패턴은 소프트웨어 개발에서 발생하는 일반적인 문제에 대한 재사용이 가능하도록 만든 솔루션이다. 안드로이드 권장 아키텍처 안드로이드에서 아래와 같은 아키텍처를 권장하고 있다. 앱 아키텍처 가이드 | Android 개발자 | Andr..
Figma로 앱 설계 (다크모드)
다크 모드 다크 모드는 눈을 편하게 하기 위해 만들어진 모드라고 한다. 나는 다크 모드가 디자인이 더 이뻐서 사용하는 경우가 많다. 그래서 이번에 앱 디자인을 설계할 때 다크 모드도 가능하도록 개발하기 위해 공부를 했다. 다크 모드의 바탕은 검은색이 아니다 다크 모드의 바탕은 검정색이 아니라고 한다. 검정보다 조금 밝은 색이 들어간다고 한다. 이 사실을 알고난 뒤 예전에 사이드 프로젝트로 개발한 앱의 다크모드가 마음에 들지 않았는데 밝은 색을 첨가하지 않아서 그런 것 같다. 높이(층)은 밝기로 조절한다 처음에는 이해를 못했던 말인데, 카드뷰와 같이 높이를 가지고 싶으면 라이트 모드에서는 그림자, 다크 모드에서는 색의 밝기를 조절한다고 한다. 위의 조건을 가지고 아래와 같은 결과물을 얻을 수 있었다. 핑크..
안드로이드 RoomDB 테스트 코드 짜기
클린 코드 책을 읽는 중 TDD 개발론을 공부했다. TDD TDD(Test-Driven Development)는 코드가 기능적이고 유지 관리 가능하며 테스트하기 쉬운지 확인하기 위해 실제 코드 전에 테스트를 작성하는 소프트웨어 개발 방법론입니다. Android 개발 맥락에서 TDD를 사용하여 Android 앱의 품질과 안정성을 보장할 수 있습니다. 1. 문제를 조기에 식별하고 수정하는 데 도움이 됩니다. TDD를 사용하면 테스트가 실제 코드보다 먼저 작성되므로 개발 프로세스 초기에 모든 문제를 식별하고 수정할 수 있습니다. 2. 리팩토링 촉진 리팩토링(즉, 기능을 변경하지 않고 코드 구조를 변경하는 것)은 어려울 수 있지만 TDD는 리팩토링 후에도 코드가 의도한 대로 계속 작동하는지 확인하기 위해 실행할..
DuraSpeed 때문에 고생함
DuraSpeed 이란? App의 메모리를 관리하기 위한 시스템 앱이다. 흔히 우리가 알고있는 갤럭시 시리즈에는 DuraSpeed를 사용하지 않는다. 그런데, 중국 테블릿쪽에서는 이 앱이 시스템 앱으로 존재해서 한동안 엄청 고생했다. DuraSpeed On인 경우 DuraSpeed가 온인 경우 이 앱이 메모리 관리를 위해서 실행 중인 앱을 제외한 다른 앱들을 중지시킬 수 있는 권한을 가진다. 그래서, 앱이 알람을 받아서 어떤 행동을 하고 싶은데, 앱이 죽어버리니 알람을 받지 못하는 경우가 발생한다. 나 같은 경우에는 처음에는 FCM, 메시지를 잘 받아서 테스트를 끝내고 다음날 다시 보내니 받아지지 않는 현상이 생겼다. 한 Reddit 유저도 나와 같은 현상을 받아서 DuraSpeed를 끄는 방식을 사용했..
내가 사용하는 .gitignore 정리 (안드로이드)
깃 허브를 push를 할 때 매일 build 파일이 추가되어서 매일 삭제하는 귀찮음이 있었다. .gitignore을 사용하면 그 파일은 제외 후 push를 하는 기능이 있으며, 내가 안드로이드 앱을 개발하며 주로 사용한 명령을 정리할려고 한다. # 빌드한 파일들 제외 *.apk *.aar *.ap_ *.aab # gradle 파일 .gradle/ build/ # local sdk 위치 제외 local.properties # log 파일 *.log # .idea 제외 .idea # app/build 제외 app/build # version control 제외 vcs.xml # Google Services 제외 # google-services.json 적용하는 방법은 간단하다. git rm -r --cach..
안드로이드 빌드는 성공했지만 에뮬에선 실행이 안되는 경우
에러내용 첫 프로젝트를 만들고 난 뒤 실행이 가능한지 확인 차 빌드를 했었다. 빌드는 성공적으로 끝났으나, 에뮬레이터에서는 앱이 설치되지 않았다. 처음에는 자바 환경변수 설정을 안해서 일어난 일이라고 생각했지만, 문제는 AndroidManifest에 있었다. AndroidManifest 여기에 실행 시 메인이 될 activity를 지정하지 않아서 에뮬레이터에선 실행이 불가능했다. 따라서 메인이 될 화면을 지정을 해주면 성공적으로 실행할 수 있다.
안드로이드 recyclerview viewmodel 적용?
어댑터나 홀더가 ViewModel의 인스턴스를 가지고 있는 것은 추천하지 않습니다. 안드로이드의 ViewModel은 특히 생명주기와도 밀접해서 이와 관계없는 어댑터나 홀더가 ViewModel의 인스턴스를 가지고 있을 때 잠재적으로 메모리 해제가 안 되거나 하는 문제가 있을 수도 있을 것 같습니다. ViewModel에서 관리하는 데이터만 어댑터에 전달하는 것이 맞고요. 어댑터에서 특정 상황에 ViewModel을 조작하고 싶다면 콜백을 구현해서 조작하시면 됩니다.