Programming(201)
-
Android Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE
adb를 사용해서 apk를 설치(adb -r install [패키지명])하려고 했더니, Android Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE라는 경고문구가 떳다. 검색해보니 동일한 package의 프로그램이 설치되어있을 시, 재설치를 시도하는 도중 서명키의 충돌로 인해 발생하는 에러라고 한다. 충돌이 발생한 앱을 삭제한 후 다시 설치하면 에러를 해결할 수 있다. 생각해보니 Android Studio에서 Release/Debug를 반복했을 때 해당 증상이 발생하는 경우가 있었고, 이런 경우 Android Studio에서 ‘앱을 삭제 후 다시 설치할래?’라는 늬앙스의 확인창이 출력됐었다. 여하튼 삭제하고 다시 설치하면 된다. …고 되어있었는데, 스마..
2019.02.18 -
주말간의 삽질과 결과물(AWS Lambda 내에서 HTTP로 JSON 데이터 불러오기)
하고 싶었던 것 온라인 게임인 스마이트(SMITE)의 홈페이지에 들어가보면, 아이템 리스트를 가져오는 API로 아이템을 불러오는 걸 알 수 있었다. 이 데이터를 특정 저장소에 저장한 뒤, 한글로 번역하고 싶었다. 문제는 시즌이 계속되는 중간에도 이 데이터는 미세하게 변경된다. 물론 모든 데이터가 그런 것은 아니다. 하지만 어찌됐건 귀찮은 문제였다. 그래서 생각해낸것이 AWS의 Lambda였다. 우선 데이터를 한글로 번역해놓은 뒤, 일부 수치는 일정 기간마다 API를 통해 업데이트하면 되지 않을까. 실제로 주말간 했던 것 Node.js나 Python을 제대로 써본적이 없었다. 물론 검색해서 더듬더듬 구현하는거야 큰 문제가 되진 않겠지만, 내 코드가 아니라 그저 복사 붙여넣기에 그치지 않을까싶었다. 그나마 ..
2019.02.18 -
Oreo 이상의 OS에서 Notification이 발생하지 않는 문제
>Developer warning for package "com.your.app" Failed to post notification on channel "null" See log for more details Notification이 발생하지 않아서 원인을 추적하던 중, Notification이 발생해야 할 시점에 Logcat을 확인하니 위와같은 에러가 찍혔다. 테스트용 스마트폰을 LG G5, Samsung Galaxy FE, Samsung Galaxy 7을 구비해놓고 테스트했는데, Samsung폰에서만 증상이 발생해서 제조사에 따른 문제인가 싶었다. 확인해보니 Android 8.0 부터 추가된, notification channels과 관련된 내용이었다. LG G5에서 증상이 발생하지 않은 건, 단순히..
2019.02.14 -
RecyclerView와 IndexOutOfBoundsException
기존에 릴리즈된 Android App을 유지보수하면서, RecyclerView에 아이템을 추가하는 코드가 때때로 IndexOutOfBoundsException로 인해 App Crash가 발생하는 경우가 발생했다. Android 자체를 너무 오랜만에 보다보니, RecyclerView에 대한 것부터 알아봐야했다. 자세한 내용을 정리하기엔 시간이 부족한데다가, 잘 정리된 글들이 많아서 이하의 링크로 대체한다. RecyclerView, Android Developers Android RecyclerView 사용하기, Taehwan 님 RecyclerView에 대한 고찰, Dudmy 님 스크롤이 발생했을 때 스크롤의 위치가 마지막일 경우 다음 검색결과를 불러온 뒤, notifyItemRangeChanged(int..
2019.02.14 -
[IntelliJ] 검색과 관련된 단축키 정리
편집기를 이용해서 코드를 편집하다보면, 동일한 내용을 찾아서 일괄적으로 변경하고자 할 때가 있다. Replace all을 통해서 한번에 대체할 수도 있지만, 개인적으로는 검색한 내용과 일치하는 내용을 Multi-cursor로 선택한 후, 직접 수정하는 편을 더 좋아하는 편이다. Visual Studio Code나 Atom에서는 `Ctrl+D`를 통해서 선택할 수 있던 내용이다. IntelliJ에서는 `Alt+J`를 사용해서 동일한 기능을 수행할 수 있다. 함수 내에서 `multi_cursor_a`, `multi_cursor_b`라는 변수를 선언하여 사용하다가, 이를 낙타표기법(`multiCursorA`, `multiCursorB`)으로 변경하고자 한다면, `multi_cursor_`를 선택한 후 `Alt..
2019.02.14 -
WebView와 WebSettings
WebView를 사용하면 웹 페이지를 Android의 레이아웃에 표시하는 것이 가능하다. 다만 설정을 변경해주지 않으면 Javascript를 사용하지 못하는 등, 여러가지 제약사항이 발생한다. 아래의 코드를 참조하자. WebView webView = (WebView)findViewById(R.id.id_webview); webView.setWebViewClient(new WebViewClient()); webView.loadUrl("https://www.google.com"); layout의 id_webview를 불러온 후, 구글 검색페이지을 로드한다. 이 코드를 실행하면 구글 페이지가 WebView에 로드되는 것을 확인할 수 있다. 하지만 기본적으로 WebView는 Javascript를 실행하지 않도록..
2019.02.12