Tag Archives: Android

Eclipse에서 에뮬레이터가 사라지는 문제 간단히 해결하기

현재 안드로이드 관련 개발은 IntelliJ를 사용하고 있습니다. 하지만 경우에 따라 이클립스 환경에서 작업을 해야 하는 경우가 생기는데 이때에 에뮬레이터가 자꾸 사라져서 실행할때마다 애로사항이 있었습니다. 일단 저는 다음과 같이 adb를 재시작하며 에뮬레이터를 다시 인식하도록 하며 사용하였습니다.

$ adb kill-server && adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

하지만 위와 같은 명령어도 바로 안잡힐때도 있고 뭔가 해결되지 못한 방법인것 같고 찜찜하던 찰나 엄청난것을 알아냈습니다.

disappear_emulator_01

우선 현재 상태가 리얼 디바이스는 잡히지만 에뮬레이터는 안잡히고 있는 상황입니다. 이경우 adb 서버를 재시작하면 다시 잡히게 됩니다.

disappear_emulator_02

하지만 여기서 저 부분을 마우스 커서로 잡고 좌우로 조금만 드래그 해보면 마법같이 에뮬레이터가 등장합니다.

disappear_emulator_03

짠! 무슨 이스터애그같네요… 버그겠지만.

Android 빌드 시 OutOfMemoryError 해결 방법

android_studio

안드로이드 프로젝트가 커지게 되면서 빌드 시 메모리가 부족하다는 오류를 만나게 되는 경우가 있습니다. 오류 메시지는 대략 다음과 같은 형태를 띄고 있습니다.

Exception in thread "pool-1-thread-11" java.lang.OutOfMemoryError: GC overhead limit exceeded
Exception in thread "pool-1-thread-10" java.lang.OutOfMemoryError: GC overhead limit exceeded
Exception in thread "pool-1-thread-12" java.lang.OutOfMemoryError: GC overhead limit exceeded

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded

말 그대로 빌드시에 필요로하는 메모리가 부족한 경우인데요 힙사이즈를 적당히 늘려주면 빌드가 성공하게 됩니다. 힙사이즈의 설정은 프로젝트의 build.gradle 파일에 해주시면 됩니다.

android {
  dexOptions {
    ...
    javaMaxHeapSize "4g"
  }
}

저의 경우에는 4G정도로 설정해 주었더니 빌드가 성공하였습니다.  만약이지만 위와 같은 처리후에 다음과 같은 오류를 만나는 경우가 있을 수 있습니다.

Unable to execute dex: Cannot merge new index 65662 into a non-jumbo instruction!
Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 65662 into a non-jumbo instruction

이런 경우 jumboMode를 켜주시면 해결될 것입니다. ADT 21 이후로 사용가능한 플래그입니다.

android {
  dexOptions {
    ...
    jumboMode = true
    javaMaxHeapSize "4g"
  }
}

참고 : http://stackoverflow.com/questions/23688116/how-do-you-adjust-jvm-args-for-dex-memory-in-gradle