android ART編譯預優化注意事項

2021-10-06 09:52:51 字數 1761 閱讀 4342

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...