안드로이드 스튜디오 타겟 전환 단축키

어느 날 Tip of the day에서 실행 타겟을 바꾸는 단축키를 봤다가 유용한 것 같아서 기억해둬야지 했는데 며칠 새 잊어버렸다. Tip of the day를 다시 열어서 아무리 next를 눌러도 안나오고, 인터넷에서 android studio shortcut 등으로 아무리 검색해도 나오지 않아서 좌절. 그런데 디버깅하다가 우연히 다시 발견하게 되었다. Ctrl+Alt+R 원래는 breakpoint에서 Cmd+Alt+R을 눌러서 계속 진행하려고 했는데 손가락이 살짝 …

안드로이드 스튜디오 타겟 전환 단축키 Read More »

변경된 .gitignore 적용하기

첫 커밋을 생성하고 나면 나중에 버전관리에서 제외시키고 싶은 파일을 .gitignore에 추가해도 계속 변경상태가 git status에 나타난다. 이런 상황을 몇 번 겪어서 어떻게 해야하는지 대략적으로는 알고 있지만, 자주 쓸 일이 없다보니 매번 다시 검색하고, 이게 그 때 썼던 방법이 맞는지 확인하는 작업이 귀찮아서 확실히 기록을 남기고자 포스트를 작성했다.

git rm 명령은 파일을 삭제하고, 그 삭제된 …

변경된 .gitignore 적용하기 Read More »

Android NDK로 3rd party 라이브러리 빌드하기

NDK를 사용하는 프로젝트에서 여러 개의 네이티브 라이브러리가 필요한 경우가 있다. 처음에는 jni/  하위 디렉토리에 라이브러리 소스코드를 전부 받아두고 Android.mk 파일을 적절히 구성해서 한번에 빌드해보려고 시도했었다.

jni/Android.mk 는 하위 디렉토리를 탐색하고, jni/libraryA/Android.mk 와 jni/libraryB/Android.mk 는 그 디렉토리의 Makefile을 바탕으로 빌드(make)를 실행하면 되지 않을까 하는 생각이었다. 결론부터 말하자면 그런 거 안된다. 소스코드를 바로 받아서 그대로 둔 상태에서 Android.mk만 만든다고 해서 …

Android NDK로 3rd party 라이브러리 빌드하기 Read More »

Android Studio에서 JNI 빌드하기

우선, https://codelabs.developers.google.com/codelabs/android-studio-jni 여기에 속아선 안된다! 아직 Android Studio에서는 공식적으로 지원하지 않는 것으로 생각하는 게 정신건강에 좋다. 오로지 android ndk를 위해서만 작성한 코드만 있다면 상관없지만, 3rd party 라이브러리같은 걸 Android Studio에서 소스 컴파일 해서 사용하는 것은 불가능하다. gradle 파일에 task를 추가하는 식으로 사용하는 것이 가장 효과적이다. 이 포스팅에서는 다음과 같은 방식을 추천한다. 디렉토리 구조

Gradle …

Android Studio에서 JNI 빌드하기 Read More »

gradle.properties 파일을 지역적으로 관리하기

각종 빌드 옵션이나 외부 프로젝트 경로를 gradle.properties 파일에 설정해두고 build.gradle에서 이를 참조하도록 설정하면 빌드를 관리하기가 편하다. 그러나 여러 명이 다양한 환경에서 개발하게될 경우, gradle.properties 파일이 버전관리 시스템에 들어가면 매우 불편한 상황이 생긴다. 2명의 개발자가 어떤 외부 라이브러리 프로젝트를 참조하기 위해 ext_lib_path라는 property를 아래와 같이 설정해두고 작업을 한다고 가정해보자. 개발자1: ext_lib_path=C:\Users\dev1\Libraries\ext_lib 개발자2: ext_lib_path=/home/dev2/libs/ext_lib 라이브러리의 위치는 물론 …

gradle.properties 파일을 지역적으로 관리하기 Read More »

BroadcastReceiver 사용 시 유의점

BroadcastReceiver는 onReceive가 처리되는 동안만 존재한다. 즉, onReceive()가 처리되는 도중에 또다시 같은 인스턴스의 onReceive()가 호출되지는 않는다. 매번 새로운 인스턴스가 생성된다. 비동기처리를 통해 결과를 가져오는 작업을 못함 비동기처리가 진행되는 도중 onReceive가 리턴하고나면 BroadcastReceiver 인스턴스는 이미 invalid 상태 API 11부터는 goAsync()를 통해 가능하긴 하다. PendingResult를 가지고 있다가 다 완료되면 PendingResult.finish()를 호출해서 종료 다이얼로그 같은 거 못 띄움 NotificationManager …

BroadcastReceiver 사용 시 유의점 Read More »

Python에서 sqlite로 파일경로 insert 시 인코딩 에러

sqlite3 데이터베이스에 파일 경로를 삽입하니 아래와 같은 에러가 발생했다. sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings. 문자열을 아래와 같이 utf-8로 디코딩하면 해결된다.

 

adb를 통해서 임의의 인텐트 시작하기

커스텀 URL을 처리하거나 기타 암묵적(implicit) 인텐트를 처리하는 기능을 구현할 때 adb를 통해서 인텐트를 발생시키면 편리하게 테스트할 수 있다. 아래와 같은 형식으로 실행하면 된다.

예시