Android/공부
[Android/공부] NDK(네이티브 개발 키트) 사용과 ABI 빌드 환경 톺아보기
들어가기 전가상화 솔루션은 x86 환경에 안드로이드 앱을 올린다. 이 때 안드로이드 앱에서 사용한 네이티브로 작성된 라이브러리(.so)가 x86 환경에서는 실행되지 않는 경우가 있었다.왜 이런 상황이 발생하는지, 어떻게 NDK를 사용 및 빌드해야 해결할 수 있는지를 알아보고자 이 포스팅을 작성하게 되었다.NDK란?네이티브 개발 키트(NDK)는 Android에서 C및 C++코드를 사용할 수 있게 해주는 일련의 도구 모음이다.NDK의 호환 가능한 아키텍처ARMarmeabi-v7a : 32비트 ARM 아키텍처arm64-v8a : 64비트 ARM 아키텍처x86x86 : 32비트 Intel 아키텍처x86_64 : 64비트 Intel 아키텍처NDK는 다양한 아키텍처에 대한 지원을 제공하며, 각 아키텍처는 ABI를 ..
[Android] MockWebServer로 Mock API 활용하기
본 글은 MockWebServer 사용 방법에 초점을 두어 작성되었습니다.*Test 환경이 아닌 곳에서 사용하였습니다. 들어가기 전UI 렌더링 최적화 테스트를 위해 리스트를 만들어 테스트를 진행해야 했다.더미 리스트를 만들어서 넣는 것보다 실제 네트워크를 통해 데이터를 받아와 테스트하고 싶었다.개발된 API가 따로 없어 공공 API를 활용해야 했지만, 실제 Unit Test에서 많이 사용되는 MockWebServer를 활용해 보고 싶어 선택하게 되었다.프로젝트 설명MockWebServer를 활용해 공지사항 json response를 받아온다.받아온 response를 diffUtil RecyclerView를 통해 리스트 뷰로 보여주도록 한다.프로젝트 구성테스트용 프로젝트이지만 관심사 분리를 위해 폴더링은 ..
[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] Flow란? LiveData와 Flow 비교
Flow? Android 에서 Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍을 지원하기 위한 구성요소이다. Flow는 코루틴을 기반으로 여러 값을 제공할 수 있다. 비동기식으로 계산할 수 있는 데이터 스트림의 개념이다. 따라서 반환 값은 동일한 유형이어야 한다. ex) Flow는 정수 값을 내보내는 흐름이다. Flow는 suspend함수를 사용하여 값을 비동기적으로 생성하고 사용한다. 예를 들어 Flow는 Default 스레드를 차단하지 않고 다음 값을 생성할 네트워크 요청을 안전하게 만들 수 있다. 코루틴에서 비동기적으로 호출하기 위한 suspend 함수와 동일하지만 flow에서는 suspend 를 붙일 필요가 없다. 리액티브 프로그래밍이란? == 반응형 프로그래밍..
[Android/코루틴] 1. 코루틴은 무엇이고 왜 쓰는가?
들어가기 전 프로젝트를 하면서 suspend 함수를 활용해 서버통신을 하는 코드를 작성한 경험이 있다. 이것이 코루틴이고 비동기 실행을 간단하게 해준다는 것 까지만 알고있었다. 원리 및 장점을 제대로 알고있는 채로 코루틴을 사용하고 싶다는 생각에 코루틴을 공부하면서 배운 내용들을 시리즈로 포스팅하고자 한다. Coroutine = Co + Routine 코루틴을 co(with의 의미) + routine = 루틴의 일종으로 협동루틴이라 할 수 있다. 코루틴은 [그림 1]과 같이 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다. 루틴과 코루틴을 비교하면 [그림 2]와 같다. 루틴이 입구와 출구가 하나라면, 코루틴은 중단과 재개가 계속될 수 있는 즉 입구와 출구가 여러개라고 할 ..
[Android] 첫 안드로이드 앱 릴리즈 과정에서 겪은 트러블슈팅들
1. kakao Login API 문제 발생 [Android/트러블슈팅] Keystore 정보 확인하는 법 들어가기 전 릴리즈 apk 를 뽑을 때 keystore를 사용하게되는데, 내 keystore에 별칭을 까먹는 경우가 있었다. 이 때 내 keystore에 정보를 알 수 있는 방법을 알아보자. cmd에 keytool -list -v -keystore 'jks 파일 hyeonlog-developer.tistory.com [Android/트러블슈팅] Kakao Login API Apk 추출 시 로그인 안되는 문제/KeyHash 오류 들어가기 전 '엄빠도 어렸다'라는 서비스를 만들면서 겪은 kakao login api 트러블 슈팅에 대해 포스팅하고자 한다. 문제 설명 우리 팀은 릴리즈를 앞두고 안드로이드 ..