Google Assistant 重启丢失问题

版权声明:本文为 ShawnXiaFei 原创文章,未经允许不得转载! https://blog.csdn.net/ShawnXiaFei/article/details/82496386

前段时间有个 1+8 的机器,按照 Google O1 的政策,属于 Low Ram,要想上GMS,只能上 GMS Go

后来发现,因为机器设计特殊,不能插外存设备(TF卡、U盘),这就导致 GMS 测试时资源无法拷入,测试无法正常进行,同时因为 1G Ram 性能太差,最后咬咬牙决定改成 2+16

但是 2+16 就得上 常规 GMS 而不是 Go 版本了, 而且得从 32位 改成 64位,于是一系列修改之后,上了常规 GMS。

最后,使用中却发现,首次开机后长按 Home 键 Google Assistant 能正常用;可一旦重启机器,Google Assistant 就没了,出来的是 Google Search 了。

查了很久都没查出来为什么,对比其他正常的机器,也没发现差异。问遍了度娘、谷哥、Bing大爷,除了看到一篇一加手机同样出过这个问题的帖子外,没发现任何有价值的信息,这个问题就这么成了悬案。


最近,因为要送样,在更新软件时发现 Launcher 有点不对劲。

O1 上 Launcher 改动较大,而且为了迎合 Google 的 Low Ram 政策,Launcher 一套代码可以编译出2种 APK。因为使用的 MTK 平台,MTK 也做了定制,路径如下:

vendor\mediatek\proprietary\packages\apps\Launcher3

在这个 Launcher 的 MakeFile 中可以看到如下两个:

LOCAL_PACKAGE_NAME := MtkLauncher3

LOCAL_PACKAGE_NAME := MtkLauncher3Go

很明显,一个是常规版本,一个是针对 Go 的版本,但这两个 UI 表现完全一致,想从外观上分辨是不可能的。

PS:
为了区分 Google 原始代码和 MTK 定制后的代码,Package 下的 Launcher,就叫Launcher;而 vendor 下的 Launcher 我叫 MtkLauncher。
MTK 平台默认使用的 MtkLauncher。

不对劲之处正在这里,2+16 属于常规版本,可编译出来不是 MtkLauncher3,而 Google Assistant 正常的机器,编译是 MtkLauncher3

为了查到差异,全局搜了 MtkLauncher3 的使用情况,最后在

\device\mediatek\common\device.mk

中发现了控制逻辑:

# Add MtkLauncher3 to replace Launcher3 when vendor code is available
ifneq ($(wildcard vendor/mediatek/proprietary/packages/apps/Launcher3/Android.mk),)
    ifneq ($(strip $(MTK_GMO_RAM_OPTIMIZE)), yes)
        PRODUCT_PACKAGES += MtkLauncher3
    endif
endif

这段代码关键之处就在宏开关:MTK_GMO_RAM_OPTIMIZE,而这个宏开关是做 Low Ram 优化的。

同时在这个文件中还发现了如下几处引用:

##### 第一处引用
#From O, project with less than 1G memory, must set prop ro.config.low_ram=true
PRODUCT_PROPERTY_OVERRIDES += ro.mtk_config_max_dram_size=$(CUSTOM_CONFIG_MAX_DRAM_SIZE)
ifeq (yes,$(strip $(MTK_GMO_RAM_OPTIMIZE)))
    ifeq (0x20000000,$(strip $(CUSTOM_CONFIG_MAX_DRAM_SIZE)))
        ifneq ($(filter yes,$(BUILD_AGO_GMS) $(MTK_GMO_RAM_OPTIMIZE)),)
            $(call inherit-product, $(SRC_TARGET_DIR)/product/go_defaults_512.mk)
        endif
    endif

    ifeq (0x40000000,$(strip $(CUSTOM_CONFIG_MAX_DRAM_SIZE)))
        ifneq ($(filter yes,$(BUILD_AGO_GMS) $(MTK_GMO_RAM_OPTIMIZE)),)
            $(call inherit-product, $(SRC_TARGET_DIR)/product/go_defaults.mk)
        endif
    endif
    ifeq ($(strip $(MTK_K64_SUPPORT)), no)
        PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.zygote=zygote32
    endif
endif

##### 第二处引用
ifeq ($(strip $(MTK_GMO_RAM_OPTIMIZE)), yes)
  PRODUCT_PROPERTY_OVERRIDES += ro.mtk_gmo_ram_optimize=1
endif

##### 第三处引用
ifneq ($(strip $(MTK_GMO_RAM_OPTIMIZE)), no)
    PRODUCT_PACKAGES += Launcher3Go
else
    PRODUCT_PACKAGES += Launcher3
endif

这里前面两段代码都是在配置 Low Ram 的一些属性,第三处则控制了另一个 APP 的编译。而这个 App 也是一个 Launcher,但名字不是 MtkLauncher ,代码路劲如下:

packages\apps\Launcher3

现在是 2+16 的机器,MTK_GMO_RAM_OPTIMIZE 应该是关闭的,又因为MTK_GMO_RAM_OPTIMIZE 同时有判断 ifneq yesifneq no,因此处理上只能置为 no,不能像普通宏开关一样直接去掉,否则会编译出两个 Launcher。

在设置 MTK_GMO_RAM_OPTIMIZE = no 后,还需要将如下开关去掉:

kernel-4.4/arch/arm/configs/xxxx_debug_defconfig
kernel-4.4/arch/arm/configs/xxxx_defconfig

#CONFIG_MTK_GMO_RAM_OPTIMIZE=y

注意
这里不能置为 n,否则会出现编译问题。

终于,很幸运,在关掉这个宏开关后,MtkLauncher3出来了,Google Assistant 正常了,悬案也破了!

但是,Google Assistant 重启丢失和 Launcher 应该是没关系的,而是和这个宏开关控制的一系列逻辑有关系。

猜你喜欢

转载自blog.csdn.net/ShawnXiaFei/article/details/82496386