2012年5月15日 星期二

在記憶體少於 2GB 的環境編譯 Android 4.0 (ICS)

雖然現在大多數人的電腦都裝了大於 2GB 的記憶體,甚至可能已經在電腦上安裝到 8GB、16GB 了。但,有時若使用 VMware 的產品或 VirtualBox 等軟體建立虛擬機器時,可能在虛擬機器裡多半會配置 1GB 或 2GB 的記憶體。

不過,這麼一來編譯 Android 4.0 (ICS) 時可能會遇上如下的錯誤:


target Dex: core
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
make: *** [out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes-with-local.dex] Error 1 

這個容易處理,修改 build/core/definitions.mk 這個檔案是可以解決的,修改方式如下:

diff --git a/build/core/definitions.mk b/build/core/definitions.mk
index b678158..b83b299 100644
--- a/build/core/definitions.mk
+++ b/build/core/definitions.mk
@@ -1525,7 +1525,7 @@ define transform-classes.jar-to-dex
 @echo "target Dex: $(PRIVATE_MODULE)"
 @mkdir -p $(dir $@)
 $(hide) $(DX) \
-    $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \
+    $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1024M) \
     --dex --output=$@ \
     $(incremental_dex) \
     $(if $(NO_OPTIMIZE_DX), \ 

1 則留言:

  1. 也可用SWAP的方式
    dd if=/dev/zero of=/data/6GB.swap bs=1024 count=6144000
    mkswap /data/6GB.swap
    swapon /data/6GB.swap

    回覆刪除