我的论文中,我正在修改Android框架并构建源代码(4.1.1 Jelly Bean)。我可以进行完整的构建,但由于这需要很长时间(我正在虚拟机上使用ubuntu 12.04 64位),所以我希望构建单独的模块。
例如: 当对位置模块进行更改时,应该只需构建已更改的模块,并创建新的系统映像:
mmm frameworks/base
make snod
但这行不通。每次我试图启动时,新的系统镜像都无法启动,原因是:I/dalvikvm( 1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
经过一些研究,我尝试使用环境变量来禁用dexpreopt。
export $WITH_DEXPREOPT=false
和
export $DISABLE_DEXPREOPT=true
通过执行'make installclean' 进行完全重建。完全重建可以工作,并且框架的更改已经在构建中存在。但是,在进行新更改后,仍然执行'mmm frameworks/base' 和 'make snod' 会导致dexpreopt不匹配。
'make snod' 中的build/core/makefile也会给出警告:'警告:启用dexpreopt后,您可能需要进行完全重建。',这来自于makefile中的此行代码:
ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif
这让我认为$WITH_DEXPREOPT变量未正确设置或读取?到目前为止,我无法获得可启动的系统映像,而不进行完全重建。我遵循的禁用dexpreopt的程序是否正确,或者在对框架进行更改并获取新的系统映像后构建单独的模块是否有其他方法?
生成目标为“full-eng”。