Android(25)
-
CLEARTEXT communication to [TARGET_ADDRESS] not permitted by network security policy
HTTP 통신 라이브러리를 Volley에서 Retrofit2로 변경한 뒤, targetSDKVersion값을 28로 변경하자 잘 되던 HTTP 통신이 동작하지 않는다. 이상하다싶어서 브레이크 포인트를 걸고 확인해보니 onResponse도 아닌 onFailure에 걸렸는데, CLEARTEXT communication to [TARGET_ADDRESS] not permitted by network security policy에러가 뜨고 있었다. 다른게 아니라 Android 9.0부터는 기본적으로 HTTP로 접속하는 것을 막기 때문이라고 한다. (참고: Protecting users with TLS by default in Android P 물론 서버에서 HTTPS로 설정할 수 있다면 만사 OK지만, 나의 경..
2019.11.08 -
Kotlin <-> Java 클래스를 서로 참조 못할 때(Can not find symbol)
gradle에 다음과 같은 설정을 빼먹으면, Java로 선언한 클래스가 빌드 타임에 Kotlin으로 생성한 클래스를 참조하지 못한다. 빌드하기 전 IDE상에서는 잘 참조하고 있는 것처럼 표시하며, app의 build.gradle에서 선언해줬다 하더라도 하위 모듈에서는 해당 플러그인을 적용하도록 다시 선언해줘야 한다. 일반적으로 프로젝트 생성 시점에 언어를 Kotlin으로 선택하면 자동으로 적용되는 항목이기에 몰라도 크게 문제가 될 상황은 없지만, 레거시 코드를 부분적으로 참조한다거나 리펙토링할 때 헤멜 수 있는 문제이다. apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'
2019.11.03 -
어플리케이션의 HTTP 라이브러리를 Volley에서 Retrofit2로 교체한 후기 #1
Volley에서 Retrofit2로 HTTP 라이브러리의 변경을 결정하기까지. 2019년 11월부터 targetSDKVersion이 28 미만인 앱은 업데이트가 불가능하도록 정책이 변경됐다. targetSDKVersion이 28로 변경되면, Apache의 HTTPClient 지원이 중단된다. 여기까지는 별 생각이 없었는데, 실제로 targetSDKVersion을 28로 변경해보니 뭔가 이상하다. Volley를 사용하여 HTTP 통신을 하는 코드들이 오작동하기 시작한다. Android 5.1에서 HttpClient가 Deprecated되면서, HTTPClient에 의존하는 Volley도 사실상 Deprecated됐기 때문이다. 이에 대한 내용은 Android 통신 라이브러리의 역사를 되돌아본다, Pluu ..
2019.10.24 -
[Android] Thread와 BlockingQueue에 대한 삽질기록
프로그램을 작성하다보면 여러개의 작업을 병렬로 처리해야 할 경우가 있다. 네트워크를 통해 영상 데이터를 전송받아서, 디코딩한 후 재생하는 경우가 대표적이다. 아무튼 이번에는 BlockingQueue를 사용한 코드를 수정하다가, 몹시 곤혹스러운 상황을 맞딱드리게되서 기록을 남기려고 한다. Thread.wait()이나 Thread.sleep()을 호출하지 않는데도 Thread의 상태가 WAIT으로 변경되고, notify()나 notifyAll(), Thread.start()를 호출하지 않아도 Thread의 상태가 RUNNING으로 변경된다. 내가 작성한 코드라면 금방 단서를 찾을 수 있거나 혹은 이런 경험이 있다면 원인을 찾기 좀 쉬울 것 같은데, 심지어 Thread의 상태를 검색해보면 위에서 언급한 메서드..
2019.06.28 -
cURL을 Android에서 사용하기 위해 Shared Library(libcurl.so)로 빌드하기(32bits/64bits/without-ssl)
2019년 8월부터 64bits를 지원하지 않는 앱은 구글 플레이에 등록할 수 없다. 그래서 지금 앱에서 어떤 라이브러리를 사용하고 있는지 확인하니, ffmpeg와 curl을 비롯하여 꽤 많은 라이브러리를 사용하고 있었다. ffmpeg을 어떻게건 빌드하긴 했는데, 64bits 라이브러리를 전부 포함하지 않아서 그런지 정상적으로 영상이 재생되지 않았다. 일단 할 수 있는건 curl을 포함한 나머지 라이브러리를 크로스컴파일하는 방법밖에 없었기에, 무작정 시작해봤다. 이 글에서는 Static Library에 대해서는 다루지 않는다. Android/iOS에서 사용하기 위한 curl을 Static Library로 빌드하기 위해서는, curl-android-ios, gcesarmza 깃허브를 참조하도록 하자. 체크..
2019.06.13 -
[삽질기록] RAW H.264(AVC)에 MP4컨테이너 씌우기 #4 / FFmpeg 재빌드(64bits)
RTP로 전달된 h264, h265 파일을 차곡차곡 RAW데이터로 저장한 뒤, FFmpeg를 이용해서 Muxing해보니 정상적으로 mp4파일이 생성됐다. 재생도 잘 된다. 파일이 생성되지 않는 것 같아서 잠시 당황했었는데, LG G5에서 PC에 파일 전송모드로 연결했을 때 파일을 제대로 표시하지 못하는 문제가 있었다. File Explorer 앱을 이용해서 확인해보니 파일 생성 및 Muxing에는 문제가 없어서, 일단 기능구현이 완성된 후 고민하기로 했다. 2019년 8월부터 64bits를 지원하지 않는 앱은 구글 플레이에 등록 및 업데이트가 불가능하기 때문에, FFmpeg를 다시 빌드하기로 했다. 이전의 빌드 스크립트에서 수정해야 할 곳은 다음과 같다. 이전의 빌드스크립트는 [삽질기록] RAW H.26..
2019.06.10