Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 編譯Android4.0.4

編譯Android4.0.4

編輯:關於Android編程

1、搭建Android4.0.4編譯環境;  2、在build/envsetup.sh中加入如下代碼: [cpp]   export TARGET_TOOLS_PRFIX=mips-linux-gnu-   export USE_CCACHE=1   export TARGET_PRODUCT=sdk   export TARGET_BUILD_TYPE=sdk   export TARGET_ARCH_VERSION=mips32r2   export TARGET_CPU_ARCH=24kec   export TARGET_CPU_TUNE=24kec   export TARGET_ARCH=mips   export SHOW_COMMANDS=1     編譯前要導入以下環境變量: [cpp]  export TARGET_PRODUCT=generic   export TARGET_ARCH=mips   export TARGET_ARCH_VARIANT=mips32r2   source build/envsetup.sh   setpaths   settitle     編譯時發現TARGET_ARCH仍然是arm,後來debug發現在config.mk中執行 include$(board_config_mk)後更改了TARGET_ARCH的值,在board_config_mk賦值前加上TARGET_DEVICE:=generic_mips。發現一個奇怪的問題,執行export TARGET_DEVICE:=generic_mips 不能把變量導入到config.mk中,TARGET_DEVICE:=generic。 3、編譯時遇到的問題: [cpp]   target Dex: framework   make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex] Killed     網上說是內存不足引起的,資料有提到修改/build/core/definitions.mk中-JXmx的大小,原來是1536M,改為1024M仍然不行,改為512M後有如下錯誤: [cpp]   UNEXPECTED TOP-LEVEL ERROR:   java.lang.OutOfMemoryError: GC overhead limit exceeded    at java.util.HashSet.<init>(HashSet.java:125)    at com.android.dx.dex.code.StdCatchBuilder.getCatchTypes(StdCatchBuilder.java:97)    at com.android.dx.dex.code.DalvCode.getCatchTypes(DalvCode.java:166)    at com.android.dx.dex.file.CodeItem.addContents(CodeItem.java:126)    at com.android.dx.dex.file.MixedItemSection.prepare0(MixedItemSection.java:280)    at com.android.dx.dex.file.Section.prepare(Section.java:214)    at com.android.dx.dex.file.DexFile.toDex0(DexFile.java:486)    at com.android.dx.dex.file.DexFile.toDex(DexFile.java:196)    at com.android.dx.command.dexer.Main.writeDex(Main.java:427)    at com.android.dx.command.dexer.Main.run(Main.java:180)    at com.android.dx.command.dexer.Main.main(Main.java:157)    at com.android.dx.command.Main.main(Main.java:89)   make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex] Error 3     仍然是沒有足夠的內存。 後來看到一篇資料中有人提到增大交換分區大小,就分了2G給交換分區: 在根目錄下創建swap文件夾: [cpp]  mkdir swap   cd swap   sudo dd if=/dev/zero of=swapfile bs=1024 count=5242880   sudo mkswap swapfile //把生成的文件轉換成 Swap 文件   sudo swapon swapfile //激活 Swap 文件     再次make不會有以上錯誤。 卸載swap文件的方法:sudo swapoff swapfile 如果需要一直保持這個 swap ,可以把它寫入 /etc/fstab 文件swapfilepath swap swap defaults 0 0,需要用具體操作是 vi打開/etc/fstab 在最後追加 /xxx/xxx swap swap defaults 0 0 4、編譯成功後在/out/target/product/generics/下生成三個img:ramdisk.img 、system.img、 user.img 5、在etc/profile中添加: www.2cto.com [cpp]   export ANDROID_PRODUCT_OUT=/media/Android/android4.0/mipsandroid/out/target/product/generic   export ANDROID_PRODUCT_OUT_BIN=/media/Android/android4.0/mipsandroid/out/host/linux-x86/bin   export PATH=$PATH:$ANDROID_PRODUCT_OUT_BIN     6、進入/out/host/linux-x86/bin,運行: [cpp]   ./emulator -system ./data/system.img -data ./data/userdata.img -ramdisk ./data/ramdisk.img -kernel ./data/kernel-qemu -show-kernel     模擬器就運行起來了。 7、android中m,mm,mmm編譯命令的區別: m:編譯所有的模塊  mm:編譯當前目錄下的模塊,當前目錄下要有Android.mk文件  mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件 要想使用這些命令,首先需要在Android源碼根目錄執行. build/envsetup.sh 腳本設置環境。 在根目錄下使用"make snod"重新生成system.img  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved