1. 程式人生 > >編譯framework模組,虛擬機器啟動異常問題

編譯framework模組,虛擬機器啟動異常問題

在寫硬體訪問服務程式時,修改了framework層相關模組,重新編譯make snod,模擬器啟動異常,停留在"android“介面。輸出訊息部分如下:

通過列印訊息可以看出應該是模組依賴的問題。

上網查詢,擷取部分解決方法。

檢視build/core/main.mk,發現裡面有個droidcore命令,

嘗試使用make droidcore編譯後,模擬器成功執行,並打印出修改的log,後來仔細分析droidcore:


發現一開始是執行systemimage,於是我又嘗試用make systemimage來編譯:
修改framework中原始碼,在framework/base 中mm,退至原始碼根目錄,make systemimage後,啟動模擬器,修改效果成功顯示。
Ps:
1.貌似執行make snod(systemimage no dependence)不行,看來要編上dependence才行。
2.在make systemimage 之後一定要關閉模擬器重開才行,執行adb shell stop,adb shell start也不行。

就是時間比較長,編一下要10分鐘左右。

摘自網友文章:http://blog.csdn.net/zhanglongit/article/details/26220061

-------------------------------------------------------------------------------------------------------------------------

全編andorid後,單獨修改編譯一個framwork模組,make snod會有如下告警資訊:
Warning: with dexpreopt enabled, you may need a full rebuild

使用這樣make snod 出來的映象,核心不能啟動,模擬器一直停留在“android”標誌狀態。
檢視log發現有如下錯誤列印:
DexOpt: mismatch dep signature for '/system/framework/framework.odex

檢視makefile有這樣的語句
# Enable dex-preoptimization to speed up the first boot sequence
# of an SDK AVD. Note that this operation only works on Linux for now
# 看起來這是一項為了加快第一次啟動速度的特性
ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif

修改方法1: 
build/target/board/generic/BoardConfig.mk
ifeq ($(HOST_OS),linux)
  ifeq ($(WITH_DEXPREOPT),)
    WITH_DEXPREOPT := true  #把這個改為false
  endif
endif

修改方法2:
全編譯的時候載入引數
make showcommands WITH_DEXPREOPT=false

這樣編譯出來的結果,如果以後單獨修改打包執行,就不會有上述問題了。

摘自網友文章:http://blog.csdn.net/lqxandroid2012/article/details/49509499