Android 第一次开机速度优化
現(xiàn)在很多Android項(xiàng)目都需要預(yù)裝很多apk。
主要在/system/app,/system/priv-app/,/system/vendor/app等目錄下。
預(yù)置很多應(yīng)用的結(jié)果就是,第一次開機(jī)的時(shí)候?systemService.java 會(huì)調(diào)用PackageManagerService.java對(duì)這幾個(gè)目錄下的apk多dexopt的優(yōu)化,生成oat文件。apk越多,首次開機(jī)的時(shí)間也就越長,導(dǎo)致第一次開機(jī)需要5-6分鐘,不利于用戶體驗(yàn)。
對(duì)于這些應(yīng)用,我們可以對(duì)其進(jìn)行odex優(yōu)化:
一、在devices所建立的子項(xiàng)目下的BoardConfig.mk文件中添加
????????DISABLE_DEXPREOPT := false
? ? ? ? WITH_DEXPREOPT := true
可以再編譯時(shí)對(duì)apk,jar都做odex的提取優(yōu)化,如果不想jar包做odex優(yōu)化,可以在/buid/core/java_library.mk文件中設(shè)置:
LOCAL_DEX_PREOPT := false
在實(shí)際開發(fā)過程中,有些apk如果做了odex優(yōu)化,可能會(huì)出問題,可以在apk的Android.mk文件中添加該屬性
二、打開宏WITH_DEXPREOPT:=true后,首次開機(jī)無效果仍然慢;
????????說明開機(jī)之后又去提取預(yù)置apk的odex文件(原本應(yīng)該是在預(yù)編譯階段就生成的);
? ? ? ? 主要原因是預(yù)置apk的Android.mk對(duì)32bit和64bit的配置不準(zhǔn)確導(dǎo)致。
搜索main log關(guān)鍵字:dex2oat : /system/bin/dex2oat?
??這條log打印出就代表這個(gè)apk有在做dex2oat且是32還是64的指令集
?I dex2oat : /system/bin/dex2oat --zip-fd=11 --zip-location=/system/app/***.apk --oat-fd=12?--oat-location=/data/dalvik-cache/arm or arm64/system@app@**@**.apk@classes.dex?--instruction-set=arm or arm64?--instruction-set-features=default --runtime-arg -Xms64m --runtime-arg -Xmx512m --swap-fd=13
?oat-location表示odex文件存儲(chǔ)位置
??Instruction-set表示此apk的primaryCpuAbi對(duì)應(yīng)的指令集(arm對(duì)應(yīng)32bit / arm64對(duì)應(yīng)64bit)
?請(qǐng)嚴(yán)格遵守:
?????? 1、對(duì)于64bit的芯片,若apk只32bit的lib或者只能作為32bit運(yùn)行,請(qǐng)?jiān)陬A(yù)置apk時(shí)在android.mk中添加下邊的TAG標(biāo)記此apk為32bit:
?????????????LOCAL_MULTILIB :=32?
?????????? (比如出現(xiàn)上述做dex2oat arm的log,則需這樣設(shè)定)
?????? 2、而對(duì)于有源碼無lib庫的apk,
? ? ? ? ? ? ?請(qǐng)注釋掉LOCAL_MULTILIB :=32?
??????????? (比如出現(xiàn)上述做dex2oat arm64的log,則需這樣注釋掉)
?????? 3、開機(jī)之后既提取arm又提取arm64的apk,
?????????????請(qǐng)?jiān)O(shè)定LOCAL_MULTILIB :=both
??????????? (比如出現(xiàn)上述做dex2oat arm以及arm64的log,則需這樣設(shè)定)
總之,對(duì)32bit 和 64bit?的apk做不同處理。
例:對(duì)于第三方QQ或者微信等預(yù)置apk做提取odex處理需要添加WITH_DEXPREOPT := true外
還需要在android.mk文件中添加LOCAL_MULTILIB :=both才可以。
總結(jié)
以上是生活随笔為你收集整理的Android 第一次开机速度优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发者从应用程序商店难以赚到真金白银
- 下一篇: 中国移动光猫GM 219-S获取管理员密