본문 바로가기

분류 전체보기

(35)
[Error] Program type already present 에러 처리 프로젝트 개발 중, 광고 SDK jar 파일을 libs 디렉토리에 추가해서 사용하고 있었다. 몇 일전 SDK의 버전을 높여달라는 요청이 와서 새로운 버전의 jar를 받아 파일을 교체하였다. 프로젝트 싱크 과정에서는 문제가 없었지만, APK를 뽑는 과정에서 Program type already present: [class path] 라는 에러가 발생했다. 이 에러는 클래스가 중복되어 발생되는 종속성 문제로 생각됐다. 구글에 검색을 해봐도 종속성을 제거하라는 해결 방법이 다수를 차지하고 있었다. 하지만, 이 프로젝트의 경우 라이브러리 파일을 교체하다가 발생했기 때문에 찾아본 방법들로 해결되지 않았다. Android Studio에 Build 창에 표시된 에러 내역을 보았다. com.android.builder..
3개월 전 작성한 [3개월 지난 Google I/O 2019 참가 후기] 지난 8월에 작성한 글을 링크합니다. 2019년 5월에 참가했던 Google I/O2019 참가가 후기를 미디엄에만 작성했기에 이 블로그에도 남기려 링크로 대체합니다. https://medium.com/cashwalk/google-i-o-2019-%EC%B0%B8%EA%B0%80-%ED%9B%84%EA%B8%B0-64df1214f9b1 Google I/O 2019 참가 후기 화창했던 2019년의 5월은 저에게 있어 잊지 못할 시기가 된 달입니다. 좋은 기회가 생겨 Google의 연중 최고 행사인 Google I/O 2019를 처음으로 참가하게 되었기 때문입니다. 이 포스팅에서는 I/O 19를 참가하며 전체적인 행사… medium.com
구글 정책의 문제점 : 앱, 타사 광고, 기기 기능 방해 정책 위반 약 1년 전 서버 개발자인 친구들과 함께 의기투합하여 토이 프로젝트를 완성시켰다. 정말 간단한 앱이었지만 스토어에 업로드했고, 그때부터 지금까지 1년 이상을 운영해오고 있는 작은 서비스이다. 글을 작성하는 현재를 기준으로 DAU 4,000 정도를 유지하고 있는 작지만 우리에게는 큰 서비스이다. 회사생활에 지쳐도 업데이트를 하고 사용자들이 사용하며 앱이 좋다 라는 리뷰를 달아줄 때마다 큰 기쁨과 보람을 얻으며 소소한 즐거움을 느낄 수 있게 해 준다. 하지만 지금은 더 이상 업데이트를 할 수 없을 것 같다. 문제는 7월 중순쯤부터 시작되었다. 한동안 업데이트를 안 했기에 새로운 기능을 추가하여 업데이트를 올렸더니 전혀 뚱딴지같은 업데이트 거절 사유가 도착했다. 바로 앱, 타사 광고, 기기 기능 방해 정책 위..
[IDE] AndroidStudio에서 영어 타이핑이 이상해졌다! AndroidStudio를 사용하다 보면 단축키를 많이 사용하게 된다. 정신없이 코딩을 하다 보면 갑자기 영어 알파벳이 이상하게 변할 때가 종종 있었다. Log.d("TAG", "Test ABC") //코딩하다보면 갑자기 아래줄 처럼 변한다! Log.d("TAG", "Test ABC") Log.d("TAG", "Test ABC") 아래처럼 문자가 변환되면 Androidstudio에서 인식을 하지 못한다. 이 문제는 다른 IDE들도 마찬가지 일 것이라고 생각된다. 또한 개발영역이 아닌 각종 기능 (웹 페이지 로그인 등..) 범위에 포함될 수 있는 문제이다. 지금 위의 경우처럼 이상하게 타이핑되는 문자를 전각 문자라고 한다. 처음에는 이 키워드를 알지 못해서 해결법을 모른 채, AndroidStudio를 종..
[IDE] 원하는 코드블럭을 '접어'보자 - Custom code folding regions 개발을 하다 보면 메서드 또는 굳이 계속 확인하지 않아도 되는 코드들이 있을 수 있습니다. 그때, 코드들을 접어버리면 어떨까요? 이 기능은 인텔리 J 계열 IDE에서 사용할 수 있습니다. 이 글은 Android Studio에서 코드를 작성했습니다. (다른 IDE에서도 쓸 수 있는지는 잘 모르겠습니다..) 아래 init() 메서드를 예시로 들어보겠습니다. 단순히 a, b, c, d만 선언되어있는 메서드입니다. 메서드는 보통 왼쪽에 보이는 [-] 화살표를 누르면 아래와 같이 접히는 기능은 많은 분들이 알고 계십니다. 그럼 init() 메서드에서 변수 b, c만 접을 수 있을까요? 키워드는 editor-fold입니다. 접고 싶은 코드라인 위아래를 주석으로 처리하여 열고 닫으면 왼쪽에 [-] 화살표가 하나 더 ..
[Algorithm] 버전 비교 알고리즘 (Version Compare) 프로젝트 진행 중 두 개의 버전을 비교해야 할 일이 있었습니다. 단순 버전 코드 비교가 아니고 major.minor.hotfix 형식의 String형 비교였기 때문에, 복잡한 알고리즘은 아니지만 나중에 사용할 수도 있어 기록합니다. 목표 두 개의 버전이 주어졌을 때 비교하여 큰 버전을 반환하시오. 버전은 major.minor.hotfix(1.0.0)의 형태로 제한됩니다. 입력 예시 "1.0.0", "2.0.2" 출력 예시 "2.0.2" 코드
[Android] 쉽고 빠르게 시계 만들기 (현재시간 출력) Android 시계 만들기라고 검색해보면 많은 검색 결과에서 TextView에 AsyncTask 또는 Handler를 이용하여 매 초마다 TextView를 갱신하는 방법을 사용하라고 합니다. 하지만 그 방법보다 쉽고 빠르게 현재 시간을 출력할 수 있는 방법이 있습니다. 바로 Widget에서 기본으로 제공되고 있는 TextClock입니다. TextClock Doc https://developer.android.com/reference/android/widget/TextClock TextClock | Android Developers developer.android.com TextClock은 Api Level 17(젤리빈)부터 지원하며, TextView를 상속받아 만들어진 클래스입니다. TextClock 내..
[Android] DrawerLayout의 Swipe를 비활성화 시키기 DrawerLayout을 사용하다 보면 DrawerLayout의 Swipe 기능을 비활성화시키고 싶은 경우가 있습니다. 이럴 때, 사용할 수 있는 LockMode를 알아보겠습니다. DrawerLayout Doc https://developer.android.com/reference/android/support/v4/widget/DrawerLayout DrawerLayout | Android Developers From class android.view.ViewGroup void addChildrenForAccessibility(ArrayList arg0) void addFocusables(ArrayList arg0, int arg1, int arg2) void addKeyboardNavigationClu..