Android开发Android开发经验谈Android技术知识

Android Q ART-Google Play安装时优化原理

2019-10-31  本文已影响0人  十八砖

Google Play现在除了APK文件之外,还会交付一套基于云端的ART Profile配置文件Dex Metadata(.dm)。

这个dm文件是从大数据用户那里搜集整理的APK对应的"热代码"文件,在通过GP安装apk时,会跟据dm文件提前进行优化编译,而不必等到用户使用一段时间生成热代码后再编译,可以显著提升首次启动速度。

Android P或更高版本系统的设备目前已提供相关支持。

1. 查看.prof、.dm文件
dex metadata(.dm)内容跟.prof一致,其实是一个jar(zip)压缩包,里面包含一个primary.prof。
安装apk时传.prof不识别,只识别.dm格式。

  1. 手动编译和清除一个APK:profile模式
    cmd package compile -m speed-profile -f com.whatsapp
    cmd package compile --reset com.whatsapp

  2. 手动编译和清除所有APK:profile模式
    cmd package compile -m speed-profile -f -a
    cmd package compile --reset -a

  3. 查看profile、dex metadata文件
    profman --profile-file=xxx.prof --dump-only
    profman --profile-file=xxx.dm --dump-only

    === profile ===
    ProfileInfo:
    base.apk [index=0]
            hot methods:
            startup methods: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
            post startup methods: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
            classes: 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
    

2. 对比使用.dm安装前后差异
以whatsapp为例,我们先运行一会儿whatsapp生成primary.prof文件,然后压缩成zip改名为WhatsApp.dm,我们就自己制作了dex metdata。

如下实验可以看到加上.dm后生成的.art、.odex文件明显变大了,安装时就进行了oat编译提高启动速度。
before: 279K 2019-10-31 10:18 base.odex
after: 1.7M 2019-10-31 10:14 base.odex

默认安装
pm install WhatsApp.apk

/data/app/com.whatsapp/oat/x86
-rw-r--r-- 1 system all_a71 40K 2019-10-31 10:18 base.art
-rw-r--r-- 1 system all_a71 279K 2019-10-31 10:18 base.odex
-rw-r--r-- 1 system all_a71 11M 2019-10-31 10:18 base.vdex

/data/misc/profiles/cur/0/com.whatsapp/primary.prof 大小为0
/data/misc/profiles/ref/com.whatsapp 目录为空

带有.dm安装
pm install-create : created install session [1918895757]
pm install-write 1918895757 WhatsApp.apk /data/local/tmp/WhatsApp.apk
pm install-write 1918895757 WhatsApp.dm /data/local/tmp/WhatsApp.dm //传入dm参数
pm install-commit 1918895757

/data/app/com.whatsapp
base.apk base.dm lib oat

/data/app/com.whatsapp/oat/x86
-rw-r--r-- 1 system all_a70 304K 2019-10-31 10:14 base.art
-rw-r--r-- 1 system all_a70 1.7M 2019-10-31 10:14 base.odex
-rw-r--r-- 1 system all_a70 11M 2019-10-31 10:14 base.vdex

/data/misc/profiles/cur/0/com.whatsapp/primary.prof 大小为0
/data/misc/profiles/ref/com.whatsapp/primary.prof 内容与.dm一致

3. 代码中如何使用profile文件

上一篇 下一篇

猜你喜欢

热点阅读