본문 바로가기

OS

(73)
삼성폰 HLS 재생 안됨 디버깅 몇몇 HLS 스트리밍 주소가 삼성 기기에서 재생이 안되는 이슈가 생겼다. 왜 안되는지 확실히 모르니 일단 ts 파일을 받아보자. ts 파일을 다운받기 위해선 먼저 m3u 파일을 다운받아야 한다. 크롬에 hls 프로토콜을 사용하는 주소를 입력하면 m3u 파일이 다운로드 된다. m3u 파일을 메모장으로 열어보면 다음과 같은 내용들이 나온다. #EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=119402 chunklist_w396990040.m3u8?tid=1fbe88e08b769b82b81cade5f1d9983f 내가 받은 m3u 파일은 한번 더 m3u 파일을 다운로드 해줘야 했다. chunklist_w396990040.m3u8?tid=1f..
안드로이드 패턴.. 어떤걸 쓰지?? 서론 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..
FFMPEG Compile on Ubuntu 우분투에서 abi별로 FFMPEG 컴파일 하는 방법 FFMPEG은 4.0 버전 NDK 15버전 apt install make apt install vim apt install unzip apt-get install yasm mkdir /var/android/abi mkdir /var/android/abi/ndk wget http://ffmpeg.org/releases/ffmpeg-4.0.tar.xz tar -xvf ffmpeg-4.0.tar.xz wget https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip unzip android-ndk-r15c-linux-x86_64.zip vim /var/android/abi/ffmpe..