안드로이드
-
[Flutter] 안드로이드 앱 사인 키 확인Flutter 2021. 8. 5. 00:54
안드로이드 앱의 사인 키를 확인해야할 경우가 있다. 특히 파이어베이스를 연동할 때에 디버그용이나 릴리즈용 SHA1 키를 확인해야 한다. 이를 위해서 앱을 사인하고 있는 키스토어의 위치를 확인한 후에 JDK의 keytool로 keystore를 확인하는 것이 일반적인 방법인데 사실 커맨드를 기억하기도 어렵고 불편한 것이 사실이다. 그런데, 이를 빠르게 확인하는 방법이 있는데, 바로 그래들 스크립트를 사용하는 것이다. 물론 이 방법은 플러터 프로젝트가 아닌 일반 안드로이드 프로젝트에도 동일하게 사용할 수 있다. 플러터 프로젝트의 경우 커맨드 창을 실행시키고 플러터 프로젝트의 안드로이드 디렉토리로 이동한다. 그리고 그 상태에서 gradlew signingReport 명령으로 현재 앱 사인에 사용되는 키를 확인할..
-
프록시로 인한 gradle 빌드 에러 해결 (Unity / Android Studio)Knowledge 2020. 7. 23. 20:44
회사 등 프록시로 막힌 환경에서 개발툴을 셋업은 여러가지로 어렵다. 요즘 안드로이드 빌드를 gradle로 하는 경우가 대부분인데, 인증서를 교체하는 프록시 서버 환경에서는 반드시 에러가 난다. 다음과 같은 에러가 하나의 예이다. javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException 물론 다른 네트워크 상황이나 설정으로 인한 에러일 수 있지만 프록시 환경이라면 원인은 대부분 프록시 서버가 설정이 안되었거나 아니면 프록시 서버가 바꾼 인증서를 Java가 신뢰하지 못해서이다. 해결 방법은 gradle이 프록시 서버를 통해 빌드하도록 설정하고, Java의 신뢰할 수 있는 인증서 목록에 프록시 서버의 인증서를 추가하는 것이다...
-
안드로이드 MediaPlayer mp4 비디오 재생 예제 (+VideoView)Android 2020. 7. 22. 00:09
안드로이드에서 비디오 파일을 재생하는 방법에 대해 남겨보려 한다. 초창기부터 비디오 플레이가 핵심 기능이었던 스마트폰의 역사에 걸맞게 안드로이드도 비디오 파일 재생에 있어서는 다양하고 편한 여러 가지 방법들을 제공한다. 거의 모든 안드로이드 폰에서 하드웨어 가속이 뒷받침 되기에 범용적으로 많이 쓰이는 미디어 파일들의 경우 전혀 무리없이 재생이 가능하다. 이번에는 여러 가지 방법들 중 가장 쉬운 VideoView를 활용한 방법과 한 단계 더 나아가서 MediaPlayer를 직접적으로 사용하는 방법에 대해서 남겨보려 한다. 미디어 컨트롤, 해상도 변경, 스트리밍 처리, 레이어 애니메이션 등 고급 주제는 배제하고 단순히 APK내부에 포함된 비디오 파일을 재생하는데 집중하겠다. VideoView 비디오뷰는 안드..
-
안드로이드 Glide와 CircleImageView로 원형 이미지 표시Android 2020. 7. 20. 20:33
안드로이드 작업을 하던 중 이미지뷰를 동그랗게 표시해야 하는 상황을 만났다. 카카오톡의 프로필 사진이 동그랗게 표시되는 것과 유사한 형태의 작업이었다. 당연히 안드로이드의 기본 UI를 통해 아주 간단하게 할 수 있을줄 알았는데, 세상 일이 그리 만만치 않았다. 언제나 나를 실망시키지 않는 안드로이드에 실망하면서 방법을 찾아보니 꼼수로 원형으로 뚤린 프레임을 만들어 이미지뷰 위에 덮어 씌우는 방법이 가장 간단한 방법인 것 같았다. 그런데, 내 경우에는 원형 뒤의 배경이 투명이어서 적용이 불가능한 방법이었다. 가장 정석대로 하려면 최종 Texture를 건드릴 수 있는 TextureView를 만들어 쉐이더로 연산을 하는 방법이 있는데 이 방법은 내가 하려는 일에 비해 배보다 배꼽이 큰 방법이었다. 결국 결론 ..
-
안드로이드 AsyncTask의 doInBackground 호출 안됨Android 2020. 7. 19. 22:40
AsyncTask를 사용하던 중 doInBackground()가 호출이 되지 않는 상황을 겪게 되었다. 복잡한 앱이 아닌 단순 클릭킹 프로토타입을 만들던 중에 일어난 일이라 황당할 따름이었다. 대략 화면을 터치하면 화면이 전환되며 4개의 작은 동영상이 동시에 재생되는 너무나 간단한 작업이라 아무 생각 없이 AsyncTask 4개를 돌렸는데 1개만 재생이 되는 현상이 나타났다. 찾아보니 문제의 원인은 AsyncTask가 이름의 뉘앙스와는 어울리지 않게 기본적으로 싱글 스레드에서 실행이 되었기 때문이었다. 영상 재생 후 다른 작업을 같이 하려고 무한루프에서 2초 정도씩 슬립하며 추가 작업을 수행했는데 이게 문제였다. 이 무한 루프가 끝날 때까지 다른 AsyncTask들이 끝날 기약없는 대기를 타고 있었던 것..
-
안드로이드 (Deprecated) AsyncTask 대체하기Android 2020. 3. 5. 20:06
안드로이드에서 백그라운드 작업을 하기 위해 자주 사용하는 AsyncTask가 사망선고를 받았다. 작년 하반기에 올라온 이 커밋에서 AsyncTask에 @Deprecated가 붙었고, 커멘트에 다음과 같이 나와 있다. AsyncTask was intended to enable proper and easy use of the UI thread. However, the most common use case was for integrating into UI, and that would cause Context leaks, missed callbacks, or crashes on configuration changes. It also has inconsistent behavior on different versi..
-
안드로이드 앱 완전히 종료하기Android 2019. 9. 19. 19:22
안드로이드 앱은 액티비티의 집합으로 이루어져 있다. 생명주기도 액티비티마다 제각각이고 시작시점과 종료시점도 때로는 불분명한 것이 안드로이드의 현 주소이다. 가장 단순한 시나리오인 앱의 종료에 있어서도 생각할 것이 많다. 액티비티만 종료를 한다면 앱의 프로세스가 살아 있어서 예기치 못한 부작용이 나타나기도 하고, 앱의 프로세스만 종료하면 Task List에 앱이 여전히 남아있는 등, 다양한 문제가 나타난다. 여러 가지 실험 결과 앱을 완전히 종료하기 위해서는 다음의 스텝을 따라야 한다는 것을 깨달아서 남겨본다. 태스크를 백그라운드로 이동 -> 액티비티 종료 -> Task List에서 지우기 -> 앱 프로세스 종료. 이 중 하나만 빠져도 예기치 못한 상황이 발생한다. 아직까지는 이 방법으로 문제가 없는데, ..
-
안드로이드에서 Rest API 호출하기Android 2019. 5. 30. 23:40
최근의 안드로이드 앱들은 서버와의 연결이 필수적이다. 과거에는 성능 등의 문제로 Native Server가 쓰이는 경우가 많았지만, 현대에 들어서는 Restful Web API를 통해 서버와 교신을 하는 경우가 늘어났다. 안드로이드 앱은 코틀린으로 작성되었거나 NDK 로 쓰여진 부분을 제외하면 자바 기반으로 쓰여지는데, 다행히 Java는 전통적으로 서버 사이드에 많이 쓰여왔기에 http 형태의 스트림을 처리하기에 알맞은 내장 클래스들을 대부분 가지고 있다. 이번에는 특별한 라이브러리를 쓰지 않고 Java만을 이용해 간단히 Rest API를 호출하는 방법을 살펴보려 한다. 필요한 클래스는 다음과 같다. Class Description HttpURLConnection HTTP 연결을 만든다 InputStre..