Tech & Programming 46

[안드로이드]Room 의 기본

안드로이드의 감을 잊지 않고 꾸준하게 공부를 동기부여를 위해 NextStep의 안드로이드 아키텍처 강의를 듣고 있다. 최근 mvvm 과제를 하면서 Room 을 사용할 일이 생겨서 기본적인 내용을 정리해 보았다. 원래 원노트에 정리해서 블로그에 옮길 때 스타일이 많이 깨져서 블로그에 공부한 내용을 올리기가 어려웠는데, 이제 VS CODE 의 플러그인으로 Markdown 으로 작성 후 원노트에 다가 배포하는 형태로 노트들을 적고 있어서 복사-붙여넣기만 하면되기에 블로그에도 한번 올려본다. Room 을 처음 사용하는 사람들에게 도움이 되었으면 합니다. Room 의 기본 Room? SQLite 를 손쉽게 사용할 수 있도록 추상화 계층을 제공 ORM 라이브러리의 일종으로 JPA 와 유사한 것으로 보임 사용방법 안..

디지털페이지 Flutter 전환 후기

요즘 개발 커뮤니티들을 보고 있으면, Flutter 전환 후기 글들이 많이 올라오는 것 같습니다. 제가 다니는 회사에서 5.0 서비스로 메이저 버전업을 하면서 디자인과 Flutter 도입을 진행했엇습니다. 이제 서비스가 릴리즈가 되었기에 안드로이드 개발자의 관점에서 인터넷에 많은 Flutter 전환 후기처럼 한번 블로깅 해봅니다. 전환도입의 이유 인력자원의 부족 원래 안드로이드 개발자와 iOS 개발자가 함께 있었는데 잦은 퇴사로 인한 인력구성이 변경되는 일이 잦다보니 우리가 계획했던 릴리즈들을 인력이 없어서 못하는 경우가 자주 발생했습니다. 그러면서 자연스럽게 이 공백을 채우기 위한 솔루션을 찾다보니 Cross Platform 언어를 검토하게 되었습니다. 왜 Flutter 인가? Cross Compile..

[Flutter] 웹뷰 하이브리드 모드 관련 이슈 해결

서문 이제 네이티브 앱을 플러터로 변경하고, 앱의 디자인 까지 변경한 디지털페이지 5.0 프로젝트가 막바지로 접어들었습니다. 11월 중에는 끝이 날 것 같은데, 끝이 나면 이 프로젝트에 대해 회고글을 시리즈로 한번 써볼까 합니다. 많은 분들이 플러터를 쓰기를 결정하는 데 참고가 되었으면 좋겠고, 프로젝트를 하는데에도 도움이 되었으면 합니다. 아무튼 빨리 바쁜 것이 끝났으면 좋겠네요. 배경 이번에는 안드로이드 플랫폼에서 웹뷰 하이브리드 관련 이슈가 났었던 것을 공유하려고 합니다. 저희 디지털페이지 5.0은 에디터 Core 는 웹으로 동작하기 때문에 웹뷰의 사용을 피할 수 없습니다. 웹뷰를 사용하다 보면 키보드 노출이 안된다 던지 한글을 사용할 수 없는 키보드 이슈를 보게 됩니다. 인터넷 Search 를 해..

플러터 StatelessWidget? StatefulWdiget?

최근 프로젝트 막바지(?) 에 이르러 정신없이 일 만하고 있습니다. 회사를 이직한 후 약 2년간의 경험을 리뷰했던 글의 말미에 적었듯이, 최근 안드로이드, iOS 어플리케이션을 플러터 전환을 하는 프로젝트를 진행하고 있습니다. 이 프로젝트가 잘 풀리지 않아서 요즘 엄청 바쁘게 일하고 있습니다. 그래서, 블로그에 꾸준히 글을 적어야지 하고 글 주제는 많이 수집 해놨는데 글 쓰는 시간이 잘 안나네요. 게다가 예전에 쓰려고 뽑아 놓은 주제들은 시간이 갈 수록 구(old) 기술이 되어 버렸거나 너무 늦었다 라는 감을 지울 수 없는 주제가 많네요. 서두가 길었습니다. 시간이 없는 관계로 최근 플러터 프로젝트를 들어가면서 개인적으로 정리해 놓은 내용 중에 제일 깔끔하고 수정이 필요 없어 보이는 녀석으로... 하나 ..

Google I/O 2021 Keynote 키워드 요약

유튜브에서 아래 영상을 Google I/O 키노트 인줄 알고 보고 키워드 별로 요약을 했는데 알고 보니 아래 영상 자체가 요약본이었네요. ^^ 추후 Google I/O 영상을 시리즈로 보면서 개인 적으로 정리할 텐데, 정리 하는 대로 쭈욱 올리겠습니다. Google I/O 2021 keynote in 16 minutes (요약 본) 구글 I/O Keynote 키워드 LaMDA Language Model 로 Chat Application 용 인공지능 엔진 명왕성 주제로 대화를 나눈 예제 딥러닝 이용 아직 초기 연구 단계, 구글 내부적으로 사용 중 이미지, 텍스트, 오디오, 비디오 리소스를 사용하여 모델을 구성 Map + AI 라이브뷰 상세한 거리 뷰 : 표지판, 횡단보도, 휠체어 등 올해말 까지 50개 도..

Android Context

Context 에 대해 공식 문서 내용에는 아래와 같이 나와 있습니다. Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. 번역을 해보자면, 어플리케이션 환경에 대..

안드로이드 11 대응(Target SDK 30) - Scoped storage

2020년 11월 1일 부로 안드로이드 Target SDK 레벨이 29 이상이어야만 업데이트가 가능합니다. 이로 인해서 Target SDK 를 올리는 작업을 하기로 결정하게 되었고, 이왕 작업하는 거 Target SDK를 30으로 올리자고 의사결정했습니다. Target SDK 30 으로 올리기 위해 작업한 내용들을 공유하고자 합니다. Scoped Storage 적용, Custom Toast 를 시스템 Toast로 전환, 백그라운드 서비스 권한 부여 및 처리 등을 진행했습니다. 이번 시간에는 Scoped Storage 를 적용한 것을 공유합니다. 과거 상태 회사에서 개발하고 있는 앱에서 접근 하고 있는 파일들의 구조를 간략하게 설명해보면 아래와 같습니다. 외부 저장공간(Environment.getExter..

Fragment에서 호출한 Activity의 결과 받기(onActivityResult 호출 원리)

Fragment 에서 activity 호출 후 호출된 Activity 종료 시 작업 결과 DATA 를 리턴받고 싶을 때가 있습니다. 이 때 아래와 같이 하면 리턴을 받을 수 있습니다. 1. Fragment를 포함하는 Activity 에 FragmentActivity 를 상속 2. Fragment 에 onActivityResult 를 오버라이딩하여 구현 3. Fragment 에 startActivityForResult() 메소드를 호출 4. Fragment 에 의해 실행된 Activity 에서 setReslut 후에 finish 5. Fragment 의 onActvityResult 가 실행됨. 일단, onActivityResult 는 Fragment 를 포함하고 있는 Activity 부터 먼저 호출됩니다...

org.apache.commons.io 라이브러리에서 java.lang.NoSuchMethodError 에러 해결

몇 달 전부터 APP.을 실행시키거나 사진이 들어간 페이지를 작성하면 죽는다는 VOC를 접수했습니다. 사용자는 삼성 노트 4에 안드로이드 6 버전을 사용하고 있었습니다. 최근 10월 말 릴리즈를 하면서 테스트할 때는 이상이 없었기에 안드로이드 API 호환성 문제로 의심하고, 애뮬레이터를 해당버전에 맞게 세팅하고 재현에 들어갔습니다. 그러자, 이미지를 TEMP 디렉토리에 복사 또는 제거하는 부분에서 Crash가 되었습니다. 로그 중에 특별한 내용은 아래와 같았습니다. java.lang.NoSuchMethodError: No virtual method toPath()Ljava/nio/file/Path; in class Ljava/io/File; or its super classes (declaration o..

android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() 오류 해결

최근 가로/세로 모드 방향전환이 가능하도록 가로모드 개발을 했습니다. 가로/세로 방향전환 시 최초 실행되는 MainActivity에서 아래와 같은 오류가 간헐적으로 발생했습니다. 2019-10-01 09:23:27.681 ~~~~~~~~~~~~~~~~~~~ /AndroidRuntime: FATAL EXCEPTION: main Process: ~~~~~~~~~~~~~~~~~~~ android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1791) a..