Android P去掉DEX优化编译

本文深入探讨了AndroidP系统编译中采用的DEX优化编译过程,包括单个apk或jar的Dex编译及系统整体编译方法。详细介绍了编译生成的odex和vdex文件的作用,并提供了去除DEX优化编译的具体步骤。

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,以便系统服务器不会仅作为解释器运行。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值