Android
[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] WorkManager를 활용해 주기적인 백그라운드 작업 실행하기 (15min ver)
지속적인 디버깅 탐지 (15min ver)WorkManager의 이슈 발생Workmanager의 주기를 15분으로 설정했으나 15분보다 더 짧은 시간에 work 발생앱 실행시 동시다발적으로 여러개의 work 발생문제상황 인식 및 분석1. MainActivity에 생성한 detectDebug WorkManager의 WorkInfo의 state를 살펴봄⇒ 여러개의 work가 한번에 enqueue되고, doWork()가 실행되는 것을 볼 수 있었음.2. Application에 등록한 createWorkManager가 여러번 실행되는 것인가? 라고 생각 함⇒ Application의 onCreate(), createWorkManager()의 함수 호출을 확인해 봄15분보다는 짧은 시간에 수행되어서 장점이라고 생각..
[Android/공부] 안드로이드 라이브러리 / AAR 만들기
라이브러리란?라이브러리란 소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것이다. 라이브러리는 동작하는 완전한 프로그램이 아닌 특정 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어 형태로 존재하는 프로그램이다.안드로이드 라이브러리안드로이드 라이브러리는 구조적으로 안드로이드 앱 모듈과 동일하다.안드로이드 라이브러리에는 소스코드, 리소스 파일, 안드로이드 manifest 등 앱을 빌드하는데 필요한 모든 것이 포함되어 있다.하지만 이는 기기에서 실행되는 apk로 컴파일 되는 것이 아닌 안드로이드 앱 모듈의 종속 항목으로 사용할 수 있는 AAR로 컴파일 된다.AAR파일은 다음과 같은 기능을 제공한다.리소스와 manifest 파일이 포함되어 있을 수 있다..
[Android/공부] JNI 활용 안드로이드 디버깅 / USB 탐지 (JAVA)
안드로이드 디버깅 탐지란?안드로이드 모바일 앱에서 LLDB, GDB, IDA 같은 동적 디버깅 도구를 붙였을 때 디버깅이 가능하다면 이는 취약점이 될 수 있다.앱이 동작할 때 동적 디버깅 도구를 활용한 디버깅 가능 여부에 따라 취약한지 결정된다.LLDB, GDB, IDA와 같은 동적 디버깅 도구로 디버깅이 가능하다면 공격자는 이를 통해 코드 흐름 파악, 메모리 상태 분석, 실행 흐름을 조작 할 수 있다.따라서 디버깅 탐지 기능을 통해 동적 도구를 활용한 디버깅을 방지 할 수 있다.디버깅 탐지 기능 설정디버깅 탐지 기능은 아래의 방법으로 존재한다.디버깅 시 사용되는 ptrace 시스템 호출 차단 및 선점ppid를 확인하여 앱을 실행 시킨 프로세스가 디버깅툴인지 확인디버깅에 사용되는 ptrace 탐지안드로이..
[Android/공부] 안드로이드 소스 코드 난독화 R8 / Proguard
1. 코드 난독화 필요성안드로이드 앱을 개발 후 APK 실행 파일을 추출할 수 있다. 또한 추출한 APK를 바탕으로 앱의 소스코드가 분석 가능하도록 디컴파일 할 수 있다.이는 테스트 및 리버스 엔지니어링 목적에는 도움이 되지만, 공격자가 앱의 코드와 동작을 분석하여 취약성을 발견하거나 중요한 데이터를 훔치는 등의 보안의 측면에서는 위험하다.따라서 소스 코드의 분석을 어렵게 만들기 위해 코드 난독화를 적용한다.2. Proguard 란?Proguard는 코드를 난독화 및 최적화를 해주는 무료 오픈소스 툴이다.즉, Proguard는 컴파일된 앱 패키지의 코드를 난독화하여 다른 사람이 해당 패키지를 디컴파일 했을 때 해독하기 어렵게 만드는 일종의 보안 장치이다.이전에 안드로이드 AGP (Android Gradl..
[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/트러블슈팅] 구글 플레이스토어 키스토어 분실 재설정 방법
들어가기 전 엄빠도어렸다 업데이트를 위해 bundle을 추출하는 과정에서 키스토어가 분실된 사실을 알게되었다. 파일을 정리하면서 지워버린 것이다.. jks 파일이 없으면 bundle 추출이 불가능하기 때문에 이를 재설정해야했다. 따라서 이번에 플레이스토어에 올린 앱의 키스토어를 재설정하는 방법을 포스팅 하고자한다. 1. 새로운 keystore 생성 안드로이드 스튜디오에서 Build > Generate Signed Bundle or APK 로 들어가 apk 또는 bundle을 선택한다. [사진 1]과 같이 뜬다면 Create new ... 를 누른다. Key Store path : 새로운 키스토어와 jks 파일이 저장되는 위치이다. Password : 새롭게 지정 할 키스토어의 비밀번호를 설정하면 된다. ..
[Android] Flow란? LiveData와 Flow 비교
Flow? Android 에서 Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍을 지원하기 위한 구성요소이다. Flow는 코루틴을 기반으로 여러 값을 제공할 수 있다. 비동기식으로 계산할 수 있는 데이터 스트림의 개념이다. 따라서 반환 값은 동일한 유형이어야 한다. ex) Flow는 정수 값을 내보내는 흐름이다. Flow는 suspend함수를 사용하여 값을 비동기적으로 생성하고 사용한다. 예를 들어 Flow는 Default 스레드를 차단하지 않고 다음 값을 생성할 네트워크 요청을 안전하게 만들 수 있다. 코루틴에서 비동기적으로 호출하기 위한 suspend 함수와 동일하지만 flow에서는 suspend 를 붙일 필요가 없다. 리액티브 프로그래밍이란? == 반응형 프로그래밍..
[Android] 인앱 업데이트 구현하기 / 인앱 업데이트 테스트
들어가기 전엄빠는 어렸다 1.1.0 버전 업데이트 과정에서 사용자에게 업데이트를 권유 할 수 있는 업데이트 팝업을 구현하고자 했다.따라서 이 포스팅에서 업데이트 팝업을 구현하는 방법을 알아보고자 한다.업데이트 팝업이란?어플에 새로운 기능이 추가되거나 버그가 수정되어 업데이트가 필요한 경우가 발생할 수 있다.이 때 어플을 실행시키면 사용자에게 업데이트가 필요함을 알리는 팝업을 업데이트 팝업이라 한다.위 사진과 같이 사용자에게 업데이트를 유도할 수 있다.엄빠도 어렸다 서비스에서는 업데이트 팝업을 구현하기 위해서 인앱 업데이트 방식을 활용하였다.인앱 업데이트란? 구글은 안드로이드 5.0 이상을 사용하는 기기에 인앱 업데이트 기능을 지원하고 있다.이는 구글 플레이스토어를 거치지 않고 앱 업데이트를 가능하게 하는..