Android P削除DEX最適化コンパイル


Android Pのシステムコンパイルでは,DEX最適化コンパイルを採用している.
単一apkまたはjarデDexコンパイル
システムでコンパイルされたファイルは、oat-arm 64-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,(WI T H D E X P R O P T))をi f e q(t r u e,(WITH_DEXPREOPT))をifeq(true,(WITHD EXPREOPT))に変更しifeq(true,(WITHD_DEXPREOPT))またはifneq(false,$(WITH_DEXPREOPT))に変更するのはデフォルトengコンパイルのためWITH_DEXPREOPTはtrueとして開く必要があります.そうしないと、コンパイルエラーが表示されます.
すなわち、英語以外のlinux構築ではpreoptが有効になっている必要があります.これにより、システムサーバが解釈器としてのみ実行されないようにします.