Android P的系统编译中,采用了DEX优化编译。
单个apk或者jar去Dex编译
在系统中编译出来的文件如下:
oat
-arm64
-SystemUI.odex
-SystemUI.vdex
SystemUI.apk
生成了后缀为odex和vdex的文件,在调式过程中,可能会出现问题。
去掉DEX优化编译的方法:
1、mm WITH_DEXPREOPT=false
2、Android.mk中增加:LOCAL_DEX_PREOPT := false
整个系统去DEX编译
make -j8 WITH_DEXPREOPT=false
报错:
ninja: no work to do.
[1/1] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
No need to regenerate ninja file
Environment variable WITH_DEXPREOPT was set, regenerating...
: error: : DEXPREOPT must be enabled for user and userdebug builds
build/make/core/dex_preopt.mk:55: error: done.
09:51:08 ckati failed with: exit status 1
修改build/make/core/dex_preopt.mk
# Non eng linux builds must have preopt enabled so that system server doesn't run as interpreter
# only. b/74209329
ifeq (,$(filter eng, $(TARGET_BUILD_VARIANT)))
ifneq (true,$(WITH_DEXPREOPT))
ifneq (true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY))
$(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)
endif
endif
endif
将ifneq (true,(WITHDEXPREOPT))改为ifeq(true,(WITH_DEXPREOPT))改为ifeq (true,(WITHDEXPREOPT))改为ifeq(true,(WITH_DEXPREOPT))或者ifneq (false,$(WITH_DEXPREOPT))
因为默认eng编译,WITH_DEXPREOPT必须打开为true,否则提示编译报错。
即:非英文linux构建必须已启用preopt,以便系统服务器不会仅作为解释器运行。
本文深入探讨了AndroidP系统编译中采用的DEX优化编译过程,包括单个apk或jar的Dex编译及系统整体编译方法。详细介绍了编译生成的odex和vdex文件的作用,并提供了去除DEX优化编译的具体步骤。
2177

被折叠的 条评论
为什么被折叠?



