Programming/Android(41)
-
Fatal Exception: java.util.ConcurrentModificationException에 대한 간단 정리
비정상 종료를 줄이기 위해서 앱에 파이어베이스를 추가하고나서, 간간히 java.util.ConcurrentModificationException 예외가 발생한 것을 볼 수 있었다. 이름에 Concurrent가 들어가있는만큼, 비동기 문제겠거니...하고 추측하고 있었는데 아무리봐도 해당 코드는 메인 스레드에서 리스트 내용을 업데이트하는 코드가 아닌가. 동시성 문제가 발생할만한 상황이 아닌데 어째서 이런 예외가 발생하는거지... 하는 의문에 빠져서 java.util.ConcurrentModificationException에 대해 찾아봤다. ConcurrentModificationException을 구글에 검색하면 수많은 블로그가 나온다. 다들 숱하게 경험한 문제란 얘기인 셈. 누군가 잘 정리해놓은 자료를 보..
2024.02.16 -
Target SDK 버전을 33으로 올렸더니 앱이 터지기 시작했다: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
한동안 방치해뒀던 안드로이드 앱이 무려 구글스토어에서 검색이 안된다는 얘기가 들어와서(...) 살펴보니, 타겟 SDK버전이 낮아서 그런 것 같았다. 왜 방치해뒀는지는 차치해두고(...) 그동안 미뤄왔던 뷰 바인딩을 적용하는 등 코드를 말끔하게 뜯어고치고 있다가, 갑자기 앱이 강제 종료됐다. 깜짝 놀라서 로그캣을 살펴보니 다음과 같은 문구가 빨간색으로 떠 있었다. FATAL EXCEPTION: Firebase-Messaging-Intent-Handle Process: , PID: 9058 java.lang.IllegalArgumentException: : Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTAB..
2023.04.07 -
m1 Mac에서 Unknown host CPU architecture: arm64가 뜬다면...
#잡설 m1 칩셋이 출시된지도 어언 1년이 지났지만 아직까지 호환성 관련된 이슈들이 가끔씩 튀어나올대마다 한숨이 나올때가 있다. 대부분의 툴들은 시간이 지났기때문인지 재설치하면 크게 문제되는 경우도 많지만, Android NDK라면 얘기가 또 다르다. 특히 이런류의 문제는 NDK에 가서 직접 코드를 수정해놓고 한참을 멍때리다가 뭔가 문제가 생겼을 때, NDK를 지우고 재설치하면 문제가 다시 튀어나오기때문에 더욱 환장할 노릇이다. 아무튼 오늘은 m1 mac에서 Android NDK를 처음 설치했을 때, 갑자기 arm64 아키텍쳐가 뭔지 모른다며 Unknown host CPU architecture: arm64 에러를 해결하는 방법에 대해 알아보자. #원인 /Users/{Username}/Library/An..
2023.01.09 -
특정 버전의 FFmpeg를 Android용으로 크로스컴파일하는 방법 정리
zerodice0/ffmpeg-android-build 브랜치를 참고해주세요. Android NDK을 사용해서 특정 버전의 ffmpeg을 빌드하는 방법에 대해 알아봅시다. 최신 버전의 ffmpeg라면 ffmpeg-android-build의 build_android.sh/build_android_64.sh만 실행시키면 간단히 빌드되므로 굳이 이 글을 참조할 필요는 없습니다. 이렇게 별도의 브랜치를 작성하는 이유는, 최근 ffmpeg를 안드로이드 용으로 크로스 컴파일하는 방법을 검색하면 독립실행형 툴체인(Stand-alone toolchain)을 사용하는 방법만 나오기 때문입니다. 독립 실행형 툴체인은 이미 진즉에 Depreacted 됐죠. 그래서 예전 버전의 NDK를 사용하지 않으면 그 방법들로는 빌드할 ..
2021.03.31 -
NDK 설정과 NDK 버전에 관련된 오류 대처 방법
Android Studio에서 NDK 설정에 대해 알아보자 기본적인 설정은 Configure the NDK for the Android Gradle plugin 문서를 참조하여 설정하면 된다. 위 링크에서는 SDK Manager를 통해서 NDK를 설치하면 된다. 특정 버전의 NDK를 적용하고싶은 경우, 파일을 다운받아 압축을 푼 뒤 File > Project Structure > Project에서 경로를 지정해주거나 build.gradle파일에 ndkPath를 지정해주면 된다. android { ndkPath "/Users/ndkPath/ndk21" // Point to your own NDK }아마 여기까지 읽었다면 엥, 링크타면 다 나와있는 내용을 굳이 글로 작성할 필요가 있나? 라는 생각이 드는 사..
2020.12.08 -
Android의 WebView를 사용할 때, 클라이언트 에러를 추적하는 방법 정리.
WevView를 세팅해보자. 우선은 레이아웃을 만들어보자. 웹뷰를 액티비티 한 가득 띄워놓을거니까, 아래처럼 xml파일을 작성하면 된다. xml파일의 작성이 끝났다면, 이번에는 Activity를 만들 차례다. 파일을 하나 생성해서 Activity를 상속받은 클래스를 하나 만들어주고, 아까전에 생성한 xml파일을 setContentView로 때려박아주자. 그 뒤 webView의 loadUrl을 호출해주면, 웹 뷰를 사용할 준비는 대충 끝났다. class MainActivity: Activity() { override fun onCreate(savedInstanceState: Bundle?) { //레이아웃 세팅 super.onCreate(savedInstanceState) setContentView(R.l..
2020.03.02