Android/프로젝트 개발

    [Android] implemantation을 Version Catalog로 바꿔보자

    들어가기 전우리의용기 프로젝트를 -v2 로 마이그레이션 하는 과정에서 기존 의존성 버전 관리 방법에서 버전 카탈로그 방식으로 변경하였다. 이러한 변경의 과정과, 왜 이 변경이 필요했고 어떤 장점이 존재하는지 이번 포스팅에서 알아보고자 한다.Gradle 버전 카탈로그를 활용한 의존성 관리: 왜 필요할까?기존 방식의 문제점build.gradle에서 의존성을 관리할 때, 보통 아래와 같은 방식으로 버전을 명시한다.implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")이 방식은 간단하고 익숙하지만, 프로젝트가 커지면서 다음과 같은 문제가 발생할 수 있다.버전 중복: 여러 모듈에서 동일한 의존성을 사용하는 경우, 각 모듈마다 버전을 반복적으로 ..

    [Android] Github Actions로 업무 생산성 향상 시키기 feat. APK 자동 추출

    목표GithubActions CI/CD 파이프라인을 구축해 서버에 APK 업로드를 자동화 하자.개발 프로세스의 효율성과 생산성을 극대화하기 위함.문제의식기존 방법의 문제점가상화 서버에 안드로이드 어플을 업로드하기 위해서 포털을 이용하여 직접 APK 파일을 업로드 하였다.하지만 새로운 업데이트가 있을 때 마다 변경된 사항을 Android Studio Build로 APK를 추출하고, 포털에 들어가서 업로드를 진행해야하는 번거로움이 있었다.Github로 관리하는 코드어플 프로젝트 코드 및 파일은 Github로 관리하고 있었다.따라서 이 점을 활용해 GithubActions를 이용하여 APK를 자동으로 추출하고, 추출 뿐만 아니라 서버 업로드까지 자동화하면 어떨까? 라는 생각이 들었다.GithubActions로..

    [Android] Menu 데이터는 어디에 저장하는 게 성능이 좋을까? (RoomDB vs Object)

    들어가기 전모바일 휴대폰의 설치된 어플리케이션 목록처럼, 화면에 이동 가능한 Activity 버튼들이 나열되어 있는 화면을 구현하고 있습니다. RecyclerView로 구현하여 각 item에 담을 리스트 데이터가 저장되어 있는데 .. 이 리스트를 RoomDB에 저장하는게 좋을지, Object에 선언하는 것이 좋을지. 성능 측면에 이점이 궁금해 각각을 알아보고, 분석을 하고자 합니다.

    [Android] PDF 뷰어 띄우기 / Activity 내에 PDF 뷰어 넣기 feat. 파일관리

    기능 요구사항Activity내가 아닌 pdf 뷰어만 보여준다.Activity 내에 pdf 뷰어를 띄워 보여준다.각각 요구사항을 만족시키는 방법에 대해 작성하였다.[공통] Android Studio PDF File 준비하기1. assets 폴더 생성projcet > app > src > main 아래에 new directory 진행assets 를 선택 한 후 폴더를 생성한다.2. 폴더에 pdf 담기생성한 assets 폴더 안에 뷰어에 띄우고자 하는 pdf 파일을 넣는다.[들어가기 전] IputStream / OutputStream 이란file의 copy를 다루면서 inputStream과 outputStream을 사용하게 되는데해당 개념이 헷갈려서 정리해둔다.이미지 출처 : https://lannstark..

    [Android/JAVA] Zxing 활용 바코드/QR 스캐너 구현하기

    기능 요구사항바코드, QR코드 스캔을 통해 데이터를 가져올 수 있도록 한다.Zxing을 활용한 바코드 구현Zxing이란Zxing (Zebra Crossing) : zxing은 오픈소스로 다중형식의 1D/2D 바코드 이미지를 처리하는 자바 라이브러리이다. zxing을 활용해서 바코드를 생성하고 읽을 수 있으며 지원하는 바코드 형식 또한 다양하다. 아래 repository를 통해서 안드로이드에서 zxing을 활용할 수 있다.https://github.com/journeyapps/zxing-android-embedded카메라 권한 설정바코드, QR코드 스캐너는 사용자의 카메라를 통해 스캔한다. 따라서 앱에서 카메라를 사용할 때 사용자의 카메라 권한이 필요하다. 카메라 권한을 설정하는 방법은 다음과 같다.1. ..

    [Android] Retrofit에서 XML 데이터 통신 및 파싱 방법 / RecyclerView XML 데이터 받아오기

    들어가기 전 현재 'ITda' 라는 이주 노동자들을 위한 서비스를 개발하고 있다. 나는 현재 뉴스페이지를 개발하고 있고 이 뉴스는 문화체육관광부의 정책뉴스 공공 API를 활용하기로 했다. 하지만 해당 API는 Json이 아닌 XML 형태로만 데이터를 보내주기 때문에 기존에 사용하던 JSON 파싱이 아닌 XML 데이터를 Retrofit에서 파싱해야했다. 따라서 이번 포스팅에서는 XML 데이터를 파싱해 전달받는 방법을 소개하고자 한다. 모든 예시는 아래 API와 함께한다. https://www.data.go.kr/data/15095335/openapi.do 문화체육관광부_정책브리핑_정책뉴스_API문화체육관광부_정책브리핑_정책뉴스는 대한민국 정부의 중요한 정책뉴스, 카드뉴스, 인포그래픽, 사실은이렇습니다 등 ..

    [Android] 인앱 업데이트 구현하기 / 인앱 업데이트 테스트

    들어가기 전엄빠는 어렸다 1.1.0 버전 업데이트 과정에서 사용자에게 업데이트를 권유 할 수 있는 업데이트 팝업을 구현하고자 했다.따라서 이 포스팅에서 업데이트 팝업을 구현하는 방법을 알아보고자 한다.업데이트 팝업이란?어플에 새로운 기능이 추가되거나 버그가 수정되어 업데이트가 필요한 경우가 발생할 수 있다.이 때 어플을 실행시키면 사용자에게 업데이트가 필요함을 알리는 팝업을 업데이트 팝업이라 한다.위 사진과 같이 사용자에게 업데이트를 유도할 수 있다.엄빠도 어렸다 서비스에서는 업데이트 팝업을 구현하기 위해서 인앱 업데이트 방식을 활용하였다.인앱 업데이트란? 구글은 안드로이드 5.0 이상을 사용하는 기기에 인앱 업데이트 기능을 지원하고 있다.이는 구글 플레이스토어를 거치지 않고 앱 업데이트를 가능하게 하는..

    [Android] registerForActivityResult로 팝업 Activity를 만들어보자

    들어가기 전 엄빠도 어렸다 서비스를 만들면서 두 사용자가 7일차까지 모두 답변을 마쳤을 때 홈화면 대신 엔딩화면이 팝업처럼 띄워지도록 구현해야했다. registerForActivityResult를 통해서 이 기능을 구현한 과정과 겪은 트러블슈팅을 포스팅해보도록 하겠다. registerForActivityResult 란? 기존의 Activity간의 이동을 할 때 startActivity(intent : Intent )를 통해서 단방향 이동을 하고, 데이터값 전달과 함께 양방향 이동을 위해서는 startActivityForResult(intent:Intent, requestCode:Int) 을 사용했다. 하지만 startActivityForeResult는 콜백 수행의 안정성, 보일러플레이트 코드의 증가 이슈..

    [Android] 기존 코드를 Hilt로 마이그레이션 해보자

    들어가기 전‘엄빠도어렸다’ 프로젝트 2차 스프린트 중, 기존 코드를 Hilt를 통해 의존성 주입 리팩토링을 진행하였습니다.그 과정과 의존성 주입으로 인해 변경된 점, 의존성 주입과 Hilt의 장점 등을 포스팅하고자 합니다.기존 코드와 Hilt의 필요성class HomeRemoteDataSource { private val homeService = ServicePool.homeService}2차 스프린트 이전의 코드는 정적 객체에 직접 의존하는 방식으로 작성되어 있었습니다.이 방식의 문제점은 다음과 같습니다:의존성 관리의 어려움HomeRemoteDataSource 클래스는 ServicePool의 정적 객체에 직접 의존합니다.이로 인해 코드 변경이나 테스트에 유연성이 떨어지고, Mock 객체를 활용한 ..

    [Android] 안드로이드 MaskFilter로 blur 효과 구현하기

    들어가기 전 엄빠도 어렸다 서비스를 만들면서 그림과같이 내가 답변을 하기 전에 상대가 답변을 할 경우 문답화면에서 상대 답변이 블러처리가 되어있는 디자인을 구현했어야 했다. 이 때 블러를 구현하기 위해서 사용했던 방법을 소개하고자 한다. Blur 효과 만들기 안드로이드 Paint BlurMaskFilter 사용 private fun setBlurText(isBlur: Boolean) { with(binding) { tvAnswerOther.setLayerType(View.LAYER_TYPE_SOFTWARE, null).apply { if (isBlur) tvAnswerOther.paint.maskFilter = BlurMaskFilter(16f, BlurMaskFilter.Blur.NORMAL) else..

    [SWith] 검색 무한스크롤

    스터디 검색 부분을 만들면서 필터링 검색 + 검색 결과 목록들은 무한스크롤로 구현하게 되었다. 무한스크롤이란? 위 이미지와 같이 게시물 리스트를 내리다가 끝 지점에 도착하면 다음 게시물 리스트를 불러오는 방법이다. 목록 끝 지점에 도착해 다음 게시물을 불러오는 중에 프로그레스바를 보여주고 로딩이 끝나면 프로그레스 바를 삭제하고 아이템뷰를 이어서 보여준다. => 홀더가 2개가 필요하다!