Android P去掉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, ( W I T H D E X P R E O P T ) ) 改 为 i f e q ( t r u e , (WITH_DEXPREOPT))改为ifeq (true, (WITHDEXPREOPT))ifeq(true,(WITH_DEXPREOPT))或者ifneq (false,$(WITH_DEXPREOPT))
因为默认eng编译,WITH_DEXPREOPT必须打开为true,否则提示编译报错。

即:非英文linux构建必须已启用preopt,以便系统服务器不会仅作为解释器运行。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sunxiaolin2016

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

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

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

打赏作者

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

抵扣说明:

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

余额充值