Android 源码编译相关知识

如何去编译APK 

 在源码环境下,使用mm命令编译module. APK会输出到out/target/product/product_name 目录下.
  mm -B :  强制重新编译.相当于clean后再编译。

 Dalvik与ART的区别
  Dalvik:
    JIT (Just-in-time)实时编译,运行的时候将字节码翻译成机器码,所运行的目标文 件(dex)与硬件平台无关,APP运行效率较低.
  ART:
    AOT(Ahead-Of-Tlme-预先编译),运行前将字节码翻译成机器码,所运行的目标文 件(oat)与硬件平台相关.APP运行效率高,但会占用空间.APK安装所需时间增加.
 odex是干什么的
    dalvik时代:APK运行的时候,会把APK中的classes.dex解压出来并通过dexopt优化为 成.odex文件,缓存在/data/dalvick-cache目录下,提高后续执行的效率.
    ART时代:APK安装的时候,会把APK中的classes.dex解压后,通过dexioat工具转化 为.odex文件(ELF格式),存储在apk所在目录的oat目录下

 为么在编译环境下就产出了odex文件

  ROM:apk、jar、bin、so文件组成

  优点:

  1、 降低系统更新后启动的时间·

      未odex的Rom.首次开机的过程中会执行“odex操作。编译时做,廾机时候就不用做了·

  2,减少在设备上进行“odex”操作所造成的空间浪费·

    编译时dexopt/dex2oat,会直接将APK的资源和代码拆开,如果在设备上安装时进行,apk大小不会减少,但又会多一个odex文件占据磁盘空间

  缺点

    1、 增加编译时间

    2、 不能在shell环境中直接执行install操作,需要将APK和odex都sync到设备上

 

如何在编译的时候关闭dex2oat

      在当前的module中的Android.mk文件中配置

LOCAL_DEX_PREOPT = false

 


      关闭所有的module的dex优化
 

在build/core/main.mk文件中配置
## eng ##

Ifeq($(TARGET_BUILD_VERIANT),eng)

Tags_to_install :=debug eng

#关闭odex优化

WITH_DEXPREOPT := false

 

posted @ 2021-07-23 10:08  迷~途  阅读(210)  评论(0编辑  收藏  举报