dex檔案編譯比較花費時間。這在ota或者工廠首次燒入程式後非常明顯
可以在boardconfig.mk檔案中使能編譯預優化,在編譯時將會為apk/jar做dex優化(dex2oat):
with_dexpreopt :
= true
如果完全的編譯預優化,則system.img的大小將會增加500mb。由於aslr特性,預優化的dex檔案將被轉化並拷貝到data分割槽,所以data分割槽同樣增加500mb。
對於android 5.1,可以使用with_dexpreopt_pic來禁止data分割槽中的優化檔案,只在system分割槽存在編譯預優化的檔案,這會對執行時稍微有些影響,這可以通過在boardconfig.mk中新增編譯選項實現:
with_dexpreopt :
= true
with_dexpreopt_pic :
= true
with_dexpreopt :
= true
with_art_small_mode :
= true
+with_dexpreopt :
= true
+product_property_overrides +
=\ + dalvik.vm.dex2oat-filter=interpret-only \
+ dalvik.vm.image-dex2oat-filter=speed
編譯預優化可能的問題
一類問題是64bit處理器上遇到的abi的適用性問題。
在64bit機器上共享uid非常複雜:
只有不依賴jni的apk,可以被同時編譯成32bit和64bit。如果使能了編譯預優化,在編譯時將生成二進位制檔案。對於64bit機器,絕大多少apk預設將被編譯成64bit二進位制,在編譯預優化完成後,為了節省空間apk的classes.dex將被刪除,但是如果apk依賴native**,並且native**被編譯成了32bit二進位制,apk同樣要被編譯成32bit二進位制。
問題來了,如果乙個32bit apk和乙個64bit apk使用共享uid,這將導致未知問題。
如果apk不共享uid,將不會出現問題。
有三種解決方法:
最後在msm8953平台使用如下:
dex_preopt_default :
= nostripping
# 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
endif
endif
android ART編譯預優化
編譯預優化 dex檔案編譯比較花費時間。這在ota或者工廠首次燒入程式後非常明顯。可以在boardconfig.mk檔案中使能編譯預優化,在編譯時將會為apk jar做dex優化 dex2oat with dexpreopt true如果完全的編譯預優化,則system.img的大小將會增加500m...
ViewPager預載入及其優化
前言 以前用viewpager做輪播圖,左右滑動感覺挺流程,沒感覺有卡頓的現象 但實現現在又用viewpager做日曆,日曆的模組全部是用canvas畫出來的,在這裡有一些演算法要去處理,viewpager左右滑動好像沒那麼流暢了。這個時候我就在想如何優化viewpager,盡量讓它左右滑動的時候不...
前端優化 檔案預載入
xhr和動態插入節點 使用動態插入節點方法載入的檔案都會在載入後立即執行。ie中使用 new image src 去預載入檔案,而其他瀏覽器使用動態插入的 標籤來完成載入。window.onload function o document.createelement object o.data pr...