ããææç apk å
å
å«ä¸ä¸ª classes.dex æ件ãå¨ Dalvikä¸ï¼apkå
éç dexæ件å¨å®è£
çæ¶åä¼éè¿ dexopt 转åæå¦ä¸ä¸ªæ ¼å¼ï¼å«odexï¼Opitimized dexï¼ï¼ç¶ååå¨ /data/dalvik-cacheéé¢ï¼å¦ï¼
ãã/data/dalvik-cache/data@
[email protected]@classes.dex
ããè½ç¶æ件åç¼è¿æ¯ .dexï¼ä½æ¯è¿ä¸ªdexåapkå
çé£ä¸ªå·²ç»ä¸ä¸æ ·äºãè¿ä¸ªæ件æ¯é对å½åæºå¨ç硬件对 dex æ件è¿è¡äºå®å¶åï¼ä¹å°±æ¯è¯´æè¿ä¸ªæ¾å°å«ç设å¤ä¸ï¼ä¸ä¸å®è½è¿è¡ã
ããPS: å¨è¦ç¼è¯ rom çæ¶åï¼å¦æåæ°å ä¸ "WITH_DEXPREOPT=true"ï¼ä¼å¨ /system/app/ ä¸åæ¶çæ .apk å .odex æ件ï¼æ³¨æï¼è¿éåç¼åç¨ç .odexï¼ä½å®é
ä¸åç³»ç»å¨ /data/dalvik-cache/ ä¸ç .dexæ件æ¯ä¸æ ·çï¼
ããART
ããå¨ ARTä¸ï¼apk å
éç dexæ件å¨å®è£
çæ¶åéè¿ dex2oatï¼ä¹ä¼çæä¸ä¸ªåç¼ä¸º .dex çæ件ï¼æ¾å¨ /data/dalvik-cacheä¸ï¼å¦ï¼
ãã/data/dalvik-cache/arm/system@app@
[email protected]@classes.dex
ãã/data/dalvik-cache/arm64/system@vendor@app@
[email protected]@classes.dex
ããè¿ä¸ªæ件åç¼å« .dex ï¼ä½æ¯è¿ä¸ªæ件åä¸ä¸æ ·äºï¼è¿ä¸ªæ¢ä¸æ¯ dex ä¹ä¸æ¯ odexï¼ç¨ dex2jar çæ æ³è¿è¡åç¼è¯çãæä»¶æ ¼å¼ä¹å®å
¨ä¸åï¼å 为è¿å
¶å®å°±æ¯ä¸ä¸ªå®æå®ç elfæ件ï¼è¿ä¸ªæ件已ç»å¯ä»¥ç´æ¥å¨æºå¨ä¸è¿è¡äºã
ããä¸ºä½ pm.jar æ¯ç©ºçï¼
ããé¦å
æ¥äºè§£ä¸ä¸ ROM çç¼è¯é项ï¼çä¸ä¸ç¼è¯çæ¶åè½åä»ä¹äºæ
ï¼ å¤§è´äºè§£å°±è¡äº ã
ããç¼è¯é项
ããWITH_DEXPREOPT
ãã使è½ç¼è¯æ¶çæ OATï¼é¿å
第ä¸æ¬¡å¼æºæ¶ç¼è¯èæ¶ï¼ä½ä¼å¢å¤§ systemååºç空é´æ¶è
ããDONT_DEXPREOPT_PREBUILTS
ãã使è½åï¼å°ä¸ä¼å¯¹ Android.mkä¸å
å«äº include $(BUILD_PREBUILT)ç Apkè¿è¡ oatï¼ä¾å¦ Gmailï¼å®å¾å¯è½ä¼å¨åæéè¿ååºèªè¡å级ï¼èå级åç³»ç»ä¸ç oatæ件å没ææä¹äºï¼ä½åæ æ³å é¤ï¼ä¼é æ空é´ç浪费ï¼oatæ¯dexæ件è¦å¤§ï¼
ããWITH_DEXPREOPT_BOOT_IMG_ONLY
ããä»
ä»
é对 boot.imgè¿è¡oatä¼åï¼boot.imgä¸å
å« boot.artå boot.oatï¼
ããLOCAL_DEX_PREOPT ture|false|nostripping
ããå¯ç¨äºå个 Android.mkï¼å¯¹æ¯ä¸ª packageè¿è¡åç¬é
ç½®ï¼å½è®¾ç½®ä¸º trueæ¶ï¼dexæ件å°ä¼ä» apkä¸åé¤ï¼å¦æä¸æ³åé¤å¯ä½¿ç¨ nostripping WPRODUCT _DEX PREOPT_*
ããWPRODUCT__DEX_PREOPT_*
ããPRODUCT_DEX_PREOPT_BOOT_FLAGS
ããè¿éçåæ°å°ä¼ä¼ è³ dex2oatï¼æ§å¶ boot.imgçç¼è¯ä¼åè¡ä¸ºã
ããPRODUCT_DEX_PREOPT_DEFAULT_FLAGS
ããæ§å¶é¤ boot.img å¤ï¼å
¶ä»ï¼å¦ jar, apkï¼ç OATç¼è¯è¡ä¸º ä¾å¦ï¼
ããPRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler- filter=interpret-only
ãã$(call add-product-dex-preopt-module- config,services,--compiler-filter=space)
ããWITH_DEXPREOPT_PIC ture|false
ããä½¿è½ position-independent codeï¼è¿æ ·å¨dex2oatç¼è¯çæç odexæ件å¨è¿è¡æ¶å°ä¸å¿
åä» /system ä¸æ·è´å° /data/dalvik-cache/ ç®å½ä¸ï¼ å¯ä»¥èç /data 空é´
ããWITH_ART_SMALL_MODE true|false
ãã设置为 true æ¶ï¼å°åªç¼è¯å¤äº boot classpath éçç±»ï¼å
¶ä»çåä¸ç¼è¯ï¼è¿æ ·æ¢è½å 快第ä¸æ¬¡å¼æºæ¶é´ï¼å 为大é¨åå¿
è¦ç类已ç»ç¼è¯è¿äºï¼ åæ¶ä¹è½èçä¸å°ç©ºé´ï¼å 为 APP é½æªè¿è¡ç¼è¯ã缺ç¹æ¯å¯è½æ失ä¸æ§è½ï¼è¿å¯è½è¦å¹³æ¶è§å¯ä¸åºï¼ä½å¨è·å软件ä¸ä¼ææä½ç°
ããç¼è¯é项çç»å
¸é
ç½®
ãã为äºæé«ç¬¬ä¸æ¬¡å¼æºé度ï¼WITH_DEXPREOPTæ¯å¿
须使è½çï¼è¿æ ·åå¨ç¼è¯é¶æ®µä¼å®æ dex2oatçæä½ï¼é¿å
å¨å¼æºæ¶é´å»åè¿ä¸ªè½¬ç ï¼èçäºå¼æºæ¶é´ï¼6min以ä¸ç¼©ç2minå
ï¼ã
ããä½ä¼å¼èµ·ä¸ä¸ªç¼ºç¹ï¼é£å°±æ¯ apkä¸è¿æ¯å
å«äº class.dexï¼dexoptçæçï¼ï¼åæ¶å¨å¯¹åºçapkæ件夹ä¸åçæäºå·²ç»è½¬ç æoatç class.odexï¼dex2oatçæçï¼ï¼ç¸å½äºè¿é¨åéå¤ï¼é æäºå¤§éç空é´æµªè´¹ã
ãã为äºæ apkå
éç class.dexå»é¤ï¼èç空é´ï¼å¯ä»¥æå¼ DEX PREOPT DEFAULT := tureã
ããç¶èï¼è¿æ ·å¼æºé度æ¯å¿«äºï¼èä¸èçäºä¸å°system空é´ï¼ä½å¼æºåï¼æ们ä¼åç°å³ä½¿å¨ systemä¸å·²ç»åå¨ class.odexç apkï¼ç¬¬ä¸æ¬¡å¼æºåè¿æ¯ä¼å¨ /dataä¸é¢çæ class.odexï¼å¦data/dalvik-cache/arm64/system@app@
[email protected]@classes.dexï¼è¿æ¯ä½è§£ï¼åæ¥ Google为äºæé«å®å
¨æ§ï¼å¨æ¯ä¸å°æºå¨å¼æºæ¶é½ä¼å¨ä¹åçæºå¨ç å ä¸ä¸ªéæºçå移éï¼è¿ä¸ªå移éæ¯éæºçï¼æ¯å°æºå¨é½ä¸ç¸åï¼è dataååºä¸çè¿äºæ件就æ¯ä» systemä¸ç class.odexå ä¸å移èæ¥ã