본문 바로가기

OS/Android

(50)
안드로이드 패턴.. 어떤걸 쓰지?? 서론 2년 동안 앱을 개발하면서 유지보수 해야 하는 어플도 많아지고 있다. 관리해야 하는 앱이 많다보니 전에 작성한 코드들이 생각이 안 날 때가 많다. 물론 코드를 짤 때 유지보수가 용이하도록 모듈화 하려고 노력하지만 실력이 부족해서인지 이것도 한계를 느끼고 있다. 조금 더 쉽게 코드들을 관리하기 위해선 패턴을 사용해야 겠다는 생각이 들었고 앞으로 만드는 프로젝트들은 패턴을 적용시켜서 개발하려고 한다. 그래서 어떤 패턴을 쓸건데? 보통 안드로이드에서 사용하는 패턴은 3가지이다. 1. MVC MVC 패턴은 개발자라면 한 번쯤은 들어봤을만큼 유명한 패턴이다. 웹 / 앱 가리지 않고 많이 사용하는(했던?) 패턴이다. 구성을 설명하자면 - Model : 일반적으로 데이터베이스나 서버에서 데이터를 받아서 가공하는..
안드로이드 기존 버전 apk에서 -> 신규 버전 bundle로 업데이트 이전에 apk로 배포했던 앱을 bundle로 업데이트 하면서 키파일 때문에 업데이트가 안되는 이슈가 있었다. 나중에 까먹을지 모르니 잊기 전에 간단하게나마 포스팅 해 놓으려고 한다. 구글 콘솔에 새버전 만들기를 클릭하면 앱 서명을 하라고 상단에 뜨게 된다. 앱 서명 밑에 사용 버튼을 누른다. 2번 째 Java Keystore의 키 내보내기 및 업로드 라디오 버튼을 선택해준다. C:\workspace\ZZKey에다 PERK를 다운로드 해준다. 터미널을 열고 C:\workspace\ZZKey로 이동해준다. []안에 있는 내용들을 본인 상황에 맞게 변경 후 스크립트를 실행시켜준다. echo y | keytool -genkeypair -dname "cn=[Hinos], ou=[Hinos], o=[Sun], c=..
Android 유닛 테스트 유닛 테스트란? 유닛 테스트는 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 즉, 모든 함수와 메소드에 대한 테스트 케이스를 작성하는 절차를 말한다. 안드로이드 유닛 테스트 종류 1. UI 테스트 - 하드웨어 기기나 에뮬레이터에서 실행되는 테스트이다. - Context로 안드로이드 내부 API에 엑세스할 수 있다. - 사용자 인터렉션을 평가하는 방식이다. - 보통 Context가 필요한 테스트가 필요할 때 사용된다. - 관련 툴 : Espresso, UIAutomator, Robotium, Appium, Calabash, Robolectric 2. Unit 테스트 - 일반적으로 코드의 유닛 단위(메소드, 클래스, 컴포넌트)의 기능을 실행하는 방식이다. - 관련 툴 : JUni..
Android Intent Intent란? Intent는 4대 컴포넌트(Activity, Service, BroadCast Receiver, Content Provider) 간에 작업 수행을 위한 정보를 전달하는 역할을 한다. 예를 들어 B 엑티비티로 이동을 한다고 했을때 코드는 다음과 같을 것이다. 코드 A. companion object { fun openActivity(context : Context) { val i = Intent(context, B::class.java) act.startActivity(i) } } A 코드에서 Intent(자신의 context, 이동할 엑티비티 클래스)로 구성되어 있고 startActivity 메소드를 통해 인텐트를 전달하고 있다. 이 코드를 좀 더 내부적으로 살펴보면 1. startAc..
Android Context 초창기에 안드로이드 개발하다가 Context 때문에 메모리 누수가 생겼던 적이 꽤 있었다. 주로 싱글턴 객체에서 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 a..
Android decompile 안드로이드에서 자바로 개발하기 때문에 달빅 머신을 JVM과 혼동하는 경우가 많은데 정확히 말하자면 달빅 머신은 JVM이 아니다. 그 예로 달빅 머신은 자바 클래스를 직접 실행할 수 없으며 달빅 머신에서 사용하려면 jar 파일을 dex로 변환해야 한다. 즉, DEX 파일은 모바일 환경에 최적화된 달빅 가상 머신에서 실행시킬 수 있는 실행 파일이라고 얘기 할 수 있다. DEX 파일은 JVM 바이트 코드를 DVM 바이트 코드로 변환한 것이기 때문에 DEX 파일을 Jar로 디컴파일하고, Jar를 classes 파일로 디컴파일하면 내부 소스코드를 확인할 수 있다. 참고로 APK 파일 압축을 풀어주면 안에 dex 파일이 포함되어 있는 것을 알 수 있다. 디컴파일 하기 위해선 두개의 툴이 필요하다. 1. dex2ja..
Android ABI FFMPEG 컴파일 하다가 ABI가 헷갈려서 정리해놓으려고 한다. 제조사마다 사용할 수 있는 CPU가 다르기 때문에 응용어플리케이션이나 OS를 어디서나 실행시키기 위해선 각 아키텍처에 맞는 기계 언어가 필요하다. 이것이 ABI이다. 쉽게 말해서 그냥 CPU 전용 API라고 생각하면 될 것 같다. ABI는 크게 X86, ARM, MIPS가 있다. X86 : 인텔 CPU를 사용하는 윈도우 폰이다. 예전 윈도우 cpu들을 486, 586 이런식으로 부를 때가 있었는데 앞 자리만 바뀐다고 X86으로 불리게 되었다고 한다. 현재 윈도우 폰이 많이 없지만 무시하기엔 아쉬운 부분이 많으므로 개발할 때 고려해야 할 것으로 보인다. MIPS : 안드로이드 4.0부터는 안드로이드에서 MIPS 아키텍처를 지원하지 않기 때문..
안드로이드 인앱 결제 테스트 이번에 안드로이드 인앱 결제 테스트를 해보았고 간단하게 히스토리를 기록하려고 한다. 단어 1. 일회성 제품 : 일회성 제품은 사용자가 결제 방법으로 반복되지 않는 단일 요금을 지급함으로써 구매할 수 있는 컨텐츠. Google Play 결제 라이브러리에서는 정기 결제를 "INAPP"이라고 칭함 - 소비성 제품 : 소비성 제품은 사용자가 게임 내 컨텐츠를 받기 위해 소비하는 제품. ex) 게임 머니 - 비소비성 제품 : 비소비성 제품은 한 번 구매하면 영구적인 혜택을 제공하는 제품 ex) 프리미엄 업그레이드 2. 정기 결제 : 정기 결제는 반복적으로 컨텐츠에 대한 엑세스를 제공하는 제품. Google Play 결제 라이브러리에서는 정기 결제를 "SUBS"라고 칭함 - 정기 결제는 취소될 때까지 자동으로 갱신..