목록프로그래밍/안드로이드 (43)
개발자 블로그
layout preview 안보임.. stackoverflow에도 같은 증상을 겪는 사람이 있는데, 답변대로 해봤지만 여전히 안보임.. 휴.. https://stackoverflow.com/questions/73772547/ Android Studio Dolphin | 2021.3.1 does not show layout preview I'm using Android Studio Dolphin | 2021.3.1 After updating Android studio chipmunk | 2021.2.1 to Android studio Dolphin | 2021.3.1 my all project design preview and layout preview not showing. If a... stackove..
길게 설명 안한다. 이거 모르는 흑우 아직 없제? 여기서 예언 하나.. 당신은 분명 속으로 'x발..'이라고 말했을꺼다. 내말이 맞지? ㅋ 응~ 내 얘기야.. 이 것 때문에 오늘 삽질 존나게 했네.. ㅅㅂ
IDE에서 기본적으로 설치되는 플러그인 외에 별도의 플러그인을 사용해본적이 최근에는 없는 것 같다. 아주 오래전 Visual Studio 6.0을 사용하던 시절에는 코드 자동완성 같은 기능이 IDE 자체에 없었기 때문에, 그 때는 자동완성 플러그인을 사용하긴 했었다. 아마도 그게 마지막 플러그인이었던 것 같네. Android Studio는 그냥 그 자체로도 대단히 훌룡한 IDE지만 찾아보니 유용한 플러그인이 있어서 추천하는 포스팅을 작성해보려고 한다. 플러그인 이름은 "SonarLint". "SonarQube"는 아는 사람이 있을지도 모르겠네. 소나큐브는 별도의 서버에 설치를 해야 되서 사용이 그리 간단하지 않지만, SonarLint는 SonarQube와 같은 기능을 별도의 서버 없이 아주 편리하게 제공..
뭐 대부분의 문제가 그렇겠지만, 이 문제 역시 바보 같은 나의 실수 때문에 발생한 문제였다. RecyclerView.Adapter의 getItemCount() 함수만 호출 안되는 것이 아니고, 다른 override 함수들인 onCreateViewHolder(), onBindViewHolder() 함수 역시 모두 호출이 되지 않았다. 브레이크 포인트를 걸어보고, 로그를 찍어봤지만 역시 호출이 안된다는 것이 확인됐다. 구글링을 해보면 LayoutManager 설정을 빼먹은게 아니냐는 글이 많고, 실제로 가끔 겪는 실수이긴한데, 이번에는 그 문제가 아니었다. 그리고 LayoutManager 설정을 빼먹었을 때는 Logcat 메시지에 아래 이미지처럼 친절하게 알려준다. 이번에 getItemCount()를 비롯해..
안드로이드 스튜디오의 새로운 버전이 출시 되었다. 뭐 새 버전 출시야 계속 반복되는 일이지만, 버전 네이밍 룰을 변경한걸 보면 뭔가 큰 변경이 생긴 것 같기도하고.. 이번 Android Studio 버전의 이름은 Arctic Fox이다. 한국어로는 북극여우 또는 흰여우. 그래서인지 이제 Android Studio를 실행시키면 잠깐 뜨는 로딩 화면에 흰여우가 그려져있다. 'A'부터 시작해서 'B', 'C', 'D'... 의 알파벳 순으로 동물의 이름으로 버전네임을 정할꺼라는데.. 'B'는 뭐가 될까? 'Bear'? 기대가 되네. 서론이 좀 길었다. 암튼 Android Studio를 업데이트 하고나니 아래 이미지처럼 한글이 깨진다. 별로 놀랍지는 않다. Android Studio를 업데이트 하면 자주 겪게되..
당겨서 새로고침을 위해서 사용하는 SwipeRefreshLayout은 일반적으로 RecyclerView와 함께 사용하는 경우가 많지만, 이번에는 ScrollView로 감싸고 있는 내용을 새로고침 하기위해서 SwipeRefreshLayout을 사용하는 방법을 설명하려고 한다. 그냥 단순하게 ScrollView를 SwipeRefreshLayout으로 감싸기만 해서는 원하는 대로 동작하지 않는다. 아래로 스크롤은 정상적으로 동작하지만 다시 위로 올리기 위해서 Swipe Down 터치 동작을 하게 되면 ScrollView의 스크롤 업 대신에 SwipeRefreshLayout의 Refresh 동작이 트리거 되기 때문이다. 일단 레이아웃은 아래와 같다. 그냥 단순히 ScrollView를 SwipeRefreshLay..
구글 플레이 스토어에 앱을 등록하기 위해서는 앱에 광고가 포함되어있는지 여부를 반드시 알려야 한다. 근데 앱에 광고를 안 넣었는데도 아래 이미지처럼 플레이 스토어에서 광고 SDK가 포함되어있다고 알리는 경우가 있어서 해결방법을 공유하려고 한다. 이 앱에는 광고가 없지만 "앱에 광고 SDK가 있습니다"라고 경고 표시가 보인다. 물론 "아니요, 앱에 광고가 없습니다."를 선택하고 넘어가면 되긴하지만.. 저 경고 표시가 너무 신경쓰여서 견딜수가 없다. gradle 의존성을 살펴보면 "com.google.android.gms:play-service-ads-identifier:17.0.0@aar"이 포함되어있는걸 볼 수 있다. 이 것 때문에 광고 SDK가 포함되어있다고 경고가 표시된 것 같다. 앱 수준의 buil..
기존 프로젝트에서는 이상이 없었는데, 최근에 만든 프로젝트에서는 '@string/appbar_scrolling_view_behavior'를 인식할 수 없다고 뜬다. 해결방법은 간단하다. 안드로이드 스튜디오에서 app 수준의 build.gradle 파일을 오픈한 뒤 dependencies에 아래 라인을 추가해준다. implementation "com.android.support:design:29.0.0" 그런다음 "Sync"를 수행하면 깔끔하게 해결!
지금까지 몇 번의 코딩 테스트를 봤었는데 문제 유형은 100% 똑같았다. API 알려주고 거기서 데이터 받아다가 화면에 리스트로 뿌리는 문제다. 이 유형에서 벗어나는 코딩 테스트는 한 번도 없었다. (참고로 경력이다. 신입의 경우에는 잘 모르겠다.) 오픈소스는 retrofit2, okhttp3, glide 이 정도 경험있으면 되고, 안드로이드 UI 쪽에서는 recyclerview를 사용해본 경험이 있으면 누구나 다 풀 수 있는 문제다. 여기에 추가적으로 디테일 화면을 구현한다던가 아니면 딥링크를 구현한다던가 아니면 테스트 코드를 작성한다던가.. 정도의 간단한 문제 몇 가지가 추가적으로 붙을 수 있다. 문제는 시간인데 시간을 분 단위로 굉장히 타이트 하게 주는 회사도 있었고, 며칠씩이나 넉넉하게 주는 회사..
배터리 최적화 예외 목록에 등록하기 위해서 "ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" 인텐트를 실행했을 때 뜨는 대화상자다.혹시나 해당 권한 요청을 고려하는 개발자에게 도움이 될까 싶어서 추가한다.여기서 허용을 하게 되면, 배터리 최적화 예외 목록에 "최적화 하지않음"으로 추가 된다. 참고로 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 인텐트를 실행하기 위해서는 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 퍼미션이 필요하다. 그리고 (중요) 해당 퍼미션이 선언 된 앱은 Google Play에 앱을 등록할 때 거부될 수도 있다. 해당 퍼미션이 앱 사용에 있어서 반드시 필요한 경우에만 승인을 해준다고 한다. 자세한..
포맷 한 번 했더니 내 설정이 다 사라져서..-_-;; 일단 필요한 것들 우선으로 여기에 정리해두려고 한다. 근데 티스토리 편집기 너무 갑작스럽게 완전 개편됐는데..?? 좀 사용자들이 서서히 적응할 수 있도록 해주는게 어떨까 싶은데.. 뭐 물론 나도 개발하는 입장에서 그냥 싹 갈아엎는게 개발 측면에서 부담없긴하다만.. 흠흠.. 1. 편집중인 코드 탭 여러줄로 표시하기 [intellij] 파일 여러개 열때 tab 여러줄로 보기. 예전에 썼던 notepad++에서 찾아서 썼던 것과 같은 기능인데요, 파일이 뭐가 열렸는지도 모르겠고, 파일 갯수가 많아서 project에서 찾기 번거로울경우, 보다는 연거 같은데.. 안보이는 경우에 좌우 넘겨서 하다 보면, 또 뭘 열었는지 한눈... todactodac.blogs..
권고(?)라는 표현이 맞을지는 모르겠다. 그냥 강제사항이라고 보면 될 것 같다.SMS 앱.. 그러니깐 문자메시지 앱이 아닌 앱의 경우에는 RECEIVE_SMS 퍼미션을 제거해야 된다. 자세한 내용은 아래 링크를 참조.https://support.google.com/googleplay/android-developer/answer/9047303?hl=ko 내가 대응한 부분은 본인확인을 위한 인증코드를 자동입력 해주는 부분이다. 게임 앱이기 때문에 SMS 관련된 기능은 전혀 없지만 처음 게임 시작할 때 본인확인 하는 부분에서만 사용하고 있었다. 일단 RECEIVE_SMS 권한은 제거 해야 된다. 그리고 인증코드 자동입력은 새롭게 추가된 "SMS Retriever API"를 사용하면 퍼미션 선언 없이도 기존처럼..
웹사이트 또는 블로그를 운영중인 사람이라면 "리퍼러(Referrer)"가 무엇인지는 이미 알고 있을거라고 생각한다. (잘 모르면 아래 링크 클릭!)위키백과 - HTTP 리퍼러간단하게 말하면 방문객이 어떤 경로로 유입되었는지 알 수 있는 정보다. 웹사이트 관리자라면 잘 알고 있을것이고, 지금 글을 작성하고 있는 티스토리 블로그에서도 관리자 페이지를 통해 이 정보를 볼 수 있다.아래 이미지는 티스토리 블로그의 관리자 페이지 > 통계 > 경로 > 유입로그를 캡처한 화면.저기서 빨간색으로 표시한 것은 web을 통한 방문이 아니라 스마트폰의 구글 검색 위젯을 통해 들어온 유입니다.내가 구현하려고 하는 것도 저것과 비슷한거고. 리퍼러를 추가하려는 Activity. 단순한 도움말 화면이다. 여기에 리퍼러를 추가하려는..
Google Play에서 앱 업데이트 버전을 출시하려고 했더니 갑자기 "새로운 권한"이 추가되었다고 경고를 보여준다. '음.. 뭐지??' 신규 Activity는 추가 했어도 권한(permission)을 추가한적은 없는것 같은데..??특히나 READ_PHONE_STATE 권한은 "위험한 권한"으로 분류되기 때문에 사용자의 명시적인 권한 부여가 필요하다. 안드로이드 권한 그룹 ☞ https://developer.android.com/guide/topics/security/permissions.html?hl=ko#normal-dangerous 혹시나 싶어서 AndroidManifest.xml 파일을 확인해 봤지만, "android.permission.READ_PHONE_STATE" 권한은 아래 코드에서 확인할..
다른 OS와 마찬가지로 안드로이드에도 파일명으로 사용할 수 없는 특수 문자들이 있다. 이러한 특수 문자들의 종류는 아래와 같다.| \ ? * /이런 특수문자들을 제거하기 위한 소스 코드는 아래와 같다.public String convertFilename(String orgnStr) { String restrictChars = "|\\\\?*
2.x 버전 쓰다가 3.x 버전으로 업그레이드 한지는 좀 됐는데 늦게나마 써본다. 혹시 아직도 2.x대 버전을 사용중인 사람이 있을 것 같아서.베타가 아닌 정식 버전이지만 그동안 당한게 있어서 그런지 최신버전으로 선뜻 업데이트 하기가 참 망설여졌다. 왜냐하면 안드로이드 스튜디오 버전 업데이트를 할 때마다 프로그램이 아무 문제없이 매끄럽게 돌아간적이 없었기 때문에.꼭 한글 관련해서 문제가 생겼다. 나 말고도 수 없이 많은 사람들이 겪은 문제이지 않나 싶다. '한글 깨짐' 문제. 나도 전에 이 문제와 관련해서 해결 방법을 포스팅 하기도 했다.2016/10/02 - [프로그래밍/안드로이드] - 안드로이드 스튜디오 2.2 레이아웃 한글 깨짐 해결방법2016/09/17 - [프로그래밍/안드로이드] - 안드로이드 ..
일반적으로 윈도우에서는 TTF, 맥(Mac)에서는 OTF 폰트를 쓴다는건 익히 알려져있지만 안드로이드 기기에서는 무슨 폰트를 써야 되는지 명확한 설명을 찾아보기 어려웠다. 각 포맷 자체에 대한 설명, 곡선을 그리는 방식의 차이에 대한 글은 봤지만,, 일반 사용자 입장에서는 별로 와닿지 않는 내용일테고. 정작 중요한건 "기기에서 어떻게 보이느냐?"가 아닐까 싶다.시간이 없는 바쁜 분들을 위해서 결론부터 말하면, 안드로이드에서는 OTF 폰트를 사용하기를 추천한다. 안드로이드 테스트를 하기 전에 먼저 윈도우에서 TTF, OTF 두 폰트를 비교해보자. 아래 사진 중 위에가 TTF, 아래가 OTF 폰트다.글자 크기가 큰 텍스트는 차이가 거의 없어보이지만, 크기가 작은 텍스트는 확실히 TTF 폰트가 더 보기 좋아보..
Android Studio에서 사용되지 않는 리소스를 찾아서 제거하는 방법.Android Studio 메뉴에서 [Analyze] > [Inspect Code...]를 선택. 그럼 Android Studio 하단 [Inspection Results] 패널에 Inspection 결과가 나타난다. 여러가지 항목들 중 미사용 리소스는 [Android Lint: Performance] > [Unused resources] 항목으로 이동하면 발견할 수 있다. 리소스 항목을 선택하면, 우측에 사용 가능한 명령들이 표시되는데, 바로 삭제하거나 Inspection에 더이상 표시되지 않도록 경고를 끌거나 할 수 있다.
I have summarized the information related to the screenshots of the smartphone that I have checked by my phone and friends. For reference, the source code for Android screenshots can be found at the link below. https://github.com/aosp-mirror/platform_frameworks_base/blob/master/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java#L97 Device OS Version Directory File name 1..
안드로이드 폰의 경우, 기기에 따라 스크린샷 이미지가 저장되는 디렉토리나 파일명이 서로 다르다. 가지고 있는 폰과 주변 지인들에게 부탁해서 확인 가능한 폰의 스크린샷 정보를 정리해봤다. 참고로 안드로이드 스크린샷 관련 소스 코드는 아래 링크에서 볼 수 있다. https://github.com/aosp-mirror/platform_frameworks_base/blob/master/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java#L97 기기명 OS버전 디렉토리 파일명 형식 1 넥서스 5x 8.0 Pictures/Screenshots Screenshot_yyyyMMdd-HHmmss.png 2 갤럭시 S88.0 DCIM/Sc..
오늘 이거 때문에 짜증나 죽는 줄 알았네.. 쉽게 찾을 수 있는 문제였는데 안될려면 이렇게도 안된다.일단 상황 설명을 좀 해야될 것 같은데,설정화면에서 색상을 선택할 수 있는 UI를 구현하고 있었다.색상을 표시하기 위해서 ImageView를 사용했고, xml 파일에서 ImageView의 src 속성 적용해줬다. 사용자가 Color Picker를 통해서 색상을 선택하면, 아래 코드를 통해서 ImageView에 적용한 Drawable의 색상을 변경해준다. selColorView = view.findViewById(R.id.img_sel_color); if (selColorView != null) { selColorView.setColorFilter(selColor); }안드로이드 N(누가)에서는 잘 동작하는..
앱을 사용하다가 백그라운드로 전환 된 후에 시간이 한참 지나면 시스템이 메모리 확보를 위해서 앱을 종료 시킨다. 다시 앱이 Active 상태로 전환 될 때 정상적인 동작을 위해서는 onSaveInstanceState 함수를 오버라이딩해서 필요한 멤버변수의 값을 저장하는 등의 필요한 조치를 해야 된다. onCreate에서는 인자로 넘어온 Bundle값을 체크해서 다시 멤버변수의 값을 복원해주는 등의 작업을 해야 되고. 사실 코딩하는건 간단한데, 테스트 하는게 쉽지가 않다. 시스템이 앱을 kill 시키는 경우를 만들어야 되는데 사용자가 제어할 수 있는게 아니니깐.내가 가지고 있는 안드로이드 책에는 DDMS에서 프로세스를 종료시키면 된다고 써있는데.. 막상 해보면 앱이 완전히 종료되어 버린다. 사실 [개발자 ..
안드로이드 오레오(8.0, API26)에서 ProgressDialog가 Deprecated 되었다. iOS에는 원래 이게 없어서 만들어 썼었는데.. 안드로이드에서는 있던 걸 Deprecate 시켰다. 아니 왜?? 이유를 찾아보니..ProgressDialog가 모달(Modal) 대화상자기 대문에 사용자와의 상호작용성을 떨어트리기 때문이란다. 아예 ProgressBar를 화면에 추가하던지, Notification을 통해서 구현하라고 한다. 아래는 그 내용. (출처)This class was deprecated in API level 26. ProgressDialog is a modal dialog, which prevents the user from interacting with the app. Instea..
안드로이드 새 버전이 출시 되었다. 이번에는 알파벳 O로 시작할 차례. 이미 공개된지 오래지만, 이름은 오레오(Oreo)다.그동안 앱 업데이트를 조금 소홀히 했더니 검색 순위에서도 엄청 밀리고.. 유입보다 삭제가 더 많은 지경에 까지 이르렀다,, 개발한다고 끝나는게 아니구나. 블로그도 새로운 포스팅 작성 안하면 유입이 점점 줄어들던데 앱 개발도 별로 다르지 않은 것 같다.targetSdkVersion을 올리는건 조심해야 된다. 예전에 안드로이드 마시멜로 버전이 출시 되었을 때 한 번 달라진 권한 모델 때문에 피를 본 경험이 있다. 이 때의 기억이 트라우마로 남은건지.. 버전을 올릴 때 마다 늘 걱정이 된다..-_-;;안드로이드 오레오(Android 8.0)에서 달라진 동작들은 여기서 확인 할 수 있다. ..
안드로이드 마시멜로 버전이 출시되었을 때, 변경된 권한 모델로 인해서 꽤 많은 피(?)를 본 경험이 있다. 그래서 그런지 새로운 안드로이드 버전이 출시 될 때마다 '권한'과 관련된 변경사항은 특별히 더 신경을 써서 챙겨본다.과거 마시멜로 권한 관련 에피소드는 아래 링크를 참조2016/10/20 - [전업개발자 이야기] - 첫 번째 앱을 출시했다가 다시 내리기까지.. 이번에 새롭게 출시 된 안드로이드 오레오(Oreo, 8.0) 버전에서도 '권한'에 대한 변경이 있다. (원문 보기 : https://developer.android.com/about/versions/oreo/android-8.0-changes.html?hl=ko#rmp)간단하게 설명하면, 안드로이드 마시멜로(6.0)부터 누가(7.1) 까지는 ..
MS의 Windows와는 다르게, iOS나 안드로이드는 하위 버전에 대한 호환성을 별로 지원하지 않는 듯 하다. 특히 iOS쪽이 좀 더 심한 것 같은데, 이 부분은 그래도 애플에서 OS업데이트를 오랫동안 지원해줘서 크게 문제는 안되는 것 같다.반면 안드로이드는 삼성나 LG같은 대기업에서 제조한 플래그쉽 모델조차 OS 업데이트는 두 번이 최대인 것 같다. 일단 지금 내가 사용중인 G2도 킷캣이랑 롤리팝 이렇게 두 번의 업데이트가 전부였다. 그리고 얼마 전에는 G4의 누가 업데이트를 하지 않겠다고 밝혔다가 여론이 악화되자 다시 번복하는 일도 있었다. (안되는데는 이유가 있다.)관련기사 - LG전자, 'G4'·'V10' 최신 업데이트 지원한다(종합) 개발하는 앱의 성격에 따라서 조금씩 다르기는한데, 내 경우에..
메뉴에 별도로 "파일관리자"앱이 없어서 에뮬레이터에서는 파일관리자앱이 없는 줄 알았다. 그래서 지금까지 "Android Device Monitor"를 사용해서 파일을 확인하고 관리했었는데.. 이제서야 파일관리자 앱을 찾았다. 지금까지 참 불편하게 일했었네..-_-;;일단 첨부한 이미지는 안드로이드 마시멜로우(API 23) 버전이 설치된 에뮬레이터 기준이다. 하지만 누가(API 24)에서도 같은 방법으로 파일관리자 앱을 실행할 수 있다. 메뉴에서 [설정] 아이콘을 클릭. 설정 앱에서 [저장소 및 USB] 항목을 클릭. [내부 저장소] 항목을 클릭. 만약 SD카드의 파일을 확인하려면 밑에 있는 [SDCARD]를 클릭하면 된다. 내부 저장소 화면에서 화면을 밑으로 조금 내리면.. [탐색] 이라는 항목이 보인다..
처음 이 에러가 발생하지는 꽤 오래 됐는데 이제서야 해결을 했다. 원인을 찾고나면 참 별거 아닌건데.. 지금까지 버그 수정했던 것들 중 제일 나를 괴롭혔던 문제같다. (사실은 아직 해결못한 놈들이 더 나를 괴롭히고 있겠지만..)계속해서 발생하던 에러는 아니고, 삼성 단말 중 안드로이드 마시멜로우 버전에서만 발생했다. SecurityException이 뜨게되면 제일 먼저 의심하는게 AndroidManifest.xml 파일의 이지만 이건 그런 문제가 아니었다. 아,, 일단 먼저 에러메시지를 봐야겠구나..전체 에러메시지는 아래와 같다. (패키지명은 *로 가렸다.) Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent {..
안드로이드 Developers 사이트에 보면 "Device Art Generator"라는게 있다. 이름에서 대략 유추 가능하듯이 뭔가를 만들어주는거다. 뭐를? 디바이스 프레임이 추가된 형태의 스크린샷을. 나는 단지 스크린샷만 준비해서 업로드(드래그) 하면 된다.사실 개발자가 하기에는 되게 귀찮은 일인데 클릭한번으로 아래 이미지처럼 근사한 이미지를 얻을 수 있다니 참 고마운 기능이다. 그런데 해당 페이지를 자세히 보면 아래와 같은 내용이 있다.여기서 만든 이미지를 구글 플레이의 스크린샷에는 사용하지 말라는 것. 솔직히 위에 저런 이미지를 만드는 이유중에 하나가 구글 플레이 스크린샷에 등록하려고 하는건데 쓰지말라니...이유가 궁금해서 구글링을 좀 해봤는데 아마도 예전에는 스크린샷 등록과 관련해서 "가공되지 ..
관련글 : https://code.google.com/p/android/issues/detail?id=62800위에 링크를 보면 알겠지만 안드로이드 킷캣에서만 발생하는 문제인 듯 하다. 실제로 롤리팝이나 마시멜로우 기기에서 테스트해보면 발생하지 않는다. 젤리빈에서도 역시 발생하지는 않는 것 같은데,, 확실하지는 않다. 테스트 기기 해상도가 낮아서 문제가 되는 크기의 큰 텍스트를 그리지 못했기 때문일 수도 있어서,,해결방법도 역시 링크로 대체.. (위에 관련글도 같은 링크를 안내하고 있다.)해결방법 : http://stackoverflow.com/questions/1723846/how-do-you-draw-text-with-a-border-on-a-mapview-in-android/5817510#58175..