使用dexpreopt禁用构建单独的Android模块

时间:2012-10-30 09:16:37

标签: android android-source android-build android-framework

对于我的论文,我正在修改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'。

1 个答案:

答案 0 :(得分:12)

显然,WITH_DEXPREOPT环境变量被

中的内部WITH_DEXPREOPT变量覆盖
build/target/board/generic/BoardConfig.mk

将此更改为false,或者根据Google群组中的人员,将其更改为:

make showcommands WITH_DEXPREOPT=false

诀窍。现在,构建一个特定的模块并创建一个新的系统映像会产生可引导的构建。

(来源:https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion