现在很多Android都需要预装很多apk,这些apk主要在/system/app,/system/priv-app/,/system/vendor/app等目录下。如果没有做odex优化,在首次开机时,systemService.java 会调用PackageManagerService.java对这几个目录下的apk多dexopt的优化,生成oat文件。apk越多,首次开机的时间也就越长。首次开机时,通常在手机上开到正在优化第*个应用,总共 * 个应用。就是在对apk做dexopt的优化。
如果我们要提高首次开机的速度,可以做如下设置:
1、在工程代码 /device/qcom/项目名/BoardConfig.mk 修改下面两个设置:
修改下面两个设置,在编译时,对jar,apk都做odex优化,生成对应的odex文件
DISABLE_DEXPREOPT := false
WITH_DEXPREOPT := true
如果不想在编译时做odex优化,可以注释掉这两行,或者把这两个值设置成:
注释:
#DISABLE_DEXPREOPT := false
#WITH_DEXPREOPT := true
或:
DISABLE_DEXPREOPT := true
WITH_DEXPREOPT := false
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优化。
3、在实际开发过程中,有些apk如果做了odex优化,可能会出问题,可以通过在apk的编译目录Android.mk文件中添加:
LOCAL_DEX_PREOPT := false
这样该apk就不会做odex优化。
如果jar包和apk都做odex优化,在我的项目中,原来的首次开机速度3分钟左右可以提高到1分05秒左右。