리눅스 & 안드로이드2012. 2. 24. 13:47
Android framework source를 빌드 하다가 다음과 같은 에러메시지를 만났다.

Error occurred during initialization of VM

Could not reserve enough space for object heap


구글링 해 보니, JVM을 실행할 때, 가용 메모리보다 더 큰 메모리 설정을 가지고 실행할 때 나타난다고 한다.
인터넷에는 보통 -Xms256m -Xmx512m 옵션을 직접 주는 방법들이 나와 있어서 JAVA_OPTS 환경변수를 이용해서 설정 해 보려고 했는데 잘 되지 않았다.

그래서 안드로이드 makefile 들을 뒤져보다, definitions.mk 파일에서 위의 옵션을 설정하는 부분을 발견했다.

codeaurora에 있는 ICS소스의 definitions.mk 파일의 내용중 아래가 해당 부분이다.

1519 #TODO: use a smaller -Xmx value for most libraries;

1520 #      only core.jar and framework.jar need a heap this big.

1521 # Avoid the memory arguments on Windows, dx fails to load for some reason with them.

1522 define transform-classes.jar-to-dex

1523 @echo "target Dex: $(PRIVATE_MODULE)"

1524 @mkdir -p $(dir $@)

1525 $(hide) $(DX) \

1526     $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1536M) \

1527     --dex --output=$@ \

1528     $(incremental_dex) \

1529     $(if $(NO_OPTIMIZE_DX), \

1530         --no-optimize) \

1531     $(if $(GENERATE_DEX_DEBUG), \

1532         --debug --verbose \

1533         --dump-to=$(@:.dex=.lst) \

1534         --dump-width=1000) \

1535     $(PRIVATE_DX_FLAGS) \

1536     $<

1537 endef


1526번 줄에 표시된 부분을 수정하면 (수치를 낮추면) 문제가 해결된다.
다른 방법이 있을지도 모르겠는데, 우선은 임시방편으로 해결 가능하다.

Posted by 세월의돌