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

b74*_*1rd 10 android android-build android-source android-framework

对于我的论文,我正在修改android框架并构建源代码(4.1.1 Jelly Bean).我可以做一个完整的构建,但因为这是非常耗时的(我正在开发一个ubuntu 12.04 64位虚拟机)我想构建单独的模块.

例如:在对位置模块进行更改时,应该可以只构建已更改的模块,并创建一个新的系统映像:

mmm frameworks/base
make snod
Run Code Online (Sandbox Code Playgroud)

但这不起作用.每次我尝试启动时,新的系统映像都将无法启动,因为:

I/dalvikvm( 1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我试图用环境变量禁用dexpreopt

export $WITH_DEXPREOPT=false 
Run Code Online (Sandbox Code Playgroud)

export $DISABLE_DEXPREOPT=true 
Run Code Online (Sandbox Code Playgroud)

并使用'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
Run Code Online (Sandbox Code Playgroud)

这让我相信$ WITH_DEXPREOPT变量没有正确设置或读取?到目前为止,在没有进行干净的完全重建的情况下,我无法获得可引导的系统映像.我遵循的程序是否正确禁用dexpreopt,或者在更改框架并获取新的系统映像后是否还有其他方法来构建单独的模块?

构建目标是'full-eng'.

b74*_*1rd 12

显然,WITH_DEXPREOPT环境变量被内部的WITH_DEXPREOPT变量覆盖

build/target/board/generic/BoardConfig.mk
Run Code Online (Sandbox Code Playgroud)

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

make showcommands WITH_DEXPREOPT=false
Run Code Online (Sandbox Code Playgroud)

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

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