編譯Android4.0.4

來源:互聯網
上載者:User

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 04、編譯成功後在/out/target/product/generics/下產生三個img:ramdisk.img 、system.img、 user.img5、在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 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.