• Android 通过odex优化提高首次开机速度


    背景

    客户反馈说开机时间过长,需要优化。

    原文:https://blog.csdn.net/croop520/article/details/73930184

    介绍

    现在很多Android都需要预装很多apk,这些apk主要在/system/app,/system/priv-app/,/system/vendor/app等目录下。

    如果没有做odex优化,在首次开机时,systemService.java 会调用PackageManagerService.java对这几个目录下的apk多dexopt的优化,生成oat文件。apk越多,首次开机的时间也就越长。

    首次开机时,通常在手机上开到正在优化第*个应用,总共 * 个应用。就是在对apk做dexopt的优化。

    解决方式

    编译时odex优化

    如果我们要提高首次开机的速度,可以做如下设置:

    1、在安卓源码树/device/xxx/项目/BoardConfig.mk 修改下面两个设置:

    #Joe add 20181221 
    # Enable dex pre-opt to speed up initial boot 
    #ifneq ($(TARGET_USES_AOSP),true) 
    # ifeq ($(HOST_OS),linux)
    ifeq ($(WITH_DEXPREOPT),)
    WITH_DEXPREOPT := true
    WITH_DEXPREOPT_PIC := true
    ifneq ($(TARGET_BUILD_VARIANT),user)
    # Retain classes.dex in APK's for non-user builds
    DEX_PREOPT_DEFAULT := nostripping
    endif
    endif
    

    修改下面两个设置,在编译时,对jar,apk都做odex优化,生成对应的odex文件

    DISABLE_DEXPREOPT := false
    WITH_DEXPREOPT := true
    

    如果不想在编译时做odex优化,可以注释掉这两行,或者把这两个值设置成:

    注释:

    #DISABLE_DEXPREOPT := false
    #WITH_DEXPREOPT := true
    
     或:
     
    DISABLE_DEXPREOPT := true
    WITH_DEXPREOPT := false
    

    jar包odex优化

    2、如果设置了:

     DISABLE_DEXPREOPT := false
     WITH_DEXPREOPT := true
    

    在编译的时候,/system/framework/目录下面的jar包,和/system/app/system/priv-app//system/vendor/app下面的apk文件,都会在编译时,做odex优化。

    如果不想jar包做odex优化,可以在/buid/core/java_library.mk文件中设置:

    LOCAL_DEX_PREOPT := false
    

    这样在编译时,jar包就不会做odex优化。

    单独的APK优化

    3、在实际开发过程中,有些apk如果做了odex优化,可能会出问题,可以通过在apk的编译目录Android.mk文件中添加:

    LOCAL_DEX_PREOPT := false

    这样该apk就不会做odex优化。

    如果jar包和apk都做odex优化,在我的项目中,原来的首次开机速度3分钟左右可以提高到1分05秒左右。

    如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
    若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
    博客地址:https://www.cnblogs.com/schips/
  • 相关阅读:
    MyBatis 自动关闭 session
    Sublime相关操作及配置
    CentOS yum换源并配置SSH
    SpringSecurity认证流程
    ES模块化的导入和导出
    Promise学习
    axios的使用
    SpringSecurity注解的使用
    Webpack笔记
    JAVA工具类
  • 原文地址:https://www.cnblogs.com/schips/p/accelerate_android_system_booting_time_by_odex.html
Copyright © 2020-2023  润新知