对于我的论文,我正在修改 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”的构建/核心/makefile 也给出了警告:“警告:启用了 dexpreopt,您可能需要完全重建。”,它来自 makefile 中的这一行:
ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif
这让我相信 $WITH_DEXPREOPT 变量没有正确设置或读取? 到目前为止,如果不进行干净的完全重建,我还无法获得可启动的系统镜像。我遵循的程序是否正确地禁用了 dexpreopt,或者是否有任何其他方法可以在更改框架并获得新的系统镜像后构建单独的模块?
构建目标是“full-eng”。
最佳答案
显然 WITH_DEXPREOPT 环境变量被
中的内部 WITH_DEXPREOPT 变量覆盖build/target/board/generic/BoardConfig.mk
将此更改为 false,或者根据 google groups 的人的说法,开始制作:
make showcommands WITH_DEXPREOPT=false
成功了。构建特定模块并制作新系统镜像现在会生成可启动构建。
(来源:https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion)
关于android - 在禁用 dexpreopt 的情况下构建单独的 Android 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13135844/