1 关键字

Launcher; 无法启动; rk3399; 3.1.2release;

2 问题描述

环境: 设备型号:扬帆rk3399 系统版本:3.1.2release

问题现象: 将定制过后的3.1.2release烧录到扬帆rk3399上,开机动画过后Launcher无法启动。

测试步骤: 1.将定制过后的3.1.2release烧录到扬帆rk3399上,等开机动画过后,一直停在开机动画最后一帧,没有加载Launcher。

3 问题原因

3.1 正常机制

1.系统启动,BMS会安装Launcher,开机动画过后AMS会启动Launcher。

3.2 异常机制

1.系统启动,BMS没有安装Launcher。 2.Launcher安装后,AMS没有启动Launcher。

4 解决方案

1.修改accountMgr的权限为root权限。 2.将/system/lib64/下的libservice_extension_module.z.so移植到/system/lib/下。

5 定位过程

1.将定制过后的3.1.2release烧录到扬帆rk3399上,启动后画面停留在开机动画最后一帧,通过aa start指令启动Launcher,报错ability not fount,说明Launcher未被正常安装。

2.检查/data/app/el1/bundle/public/目录,发现0号用户安装的应用都被正常安装,但是100号用户安装的应用都没有被正常安装,说明BMS功能正常,初步判断问题在于AccountMgr。

3.分析AccountMgr初始化代码

bool AccountMgrService::Init()
{
    ·
    ·
    ·
    ret = ohosAccountMgr_->OnInitialize();
    if (!ret) {
        ACCOUNT_LOGE("Ohos account manager initialize failed");
        HiviewDFX::HiSysEvent::Write("OS_ACCOUNT",
            "SERVICE_START_FAILED",
            HiviewDFX::HiSysEvent::EventType::FAULT,
            "ERROR_TYPE",
            ret);
        return ret;
    }
    ·
    ·
    ·
}

并结合日志

01-18 08:50:21.283   648  1049 E 01b00/AccountMgrService: [ohos_account_data_deal.cpp(SaveAccountInfo:146)] Failed to open file /data/system/users/0/account.json
01-18 08:50:21.286   648  1049 E 01b00/AccountMgrService: [account_mgr_service.cpp(Init:157)] Ohos account manager initialize failed

可知,AccountMgr未初始化成功,/data/system/users/0/account.json文件未被创建。

4.查看设备/data/system/users/目录,发现其下未被创建任何用户目录,分析相关代码未发现可能存在的问题,根据经验判断用户目录的创建与否可能与AccountMgr的系统权限有关。

5.将AccountMgr提升为root权限并重启,用户目录正常创建,并且100号用户成功安装Launcher。

6.设备启动后,虽然Launcher被成功安装,但是依然没有被启动,aa start指令也无法成功启动。通过分析AMS相关日志

01-18 08:51:22.132  1952  1952 E 02200/Ability: [extension_module_loader.cpp(GetExtensionModuleLoader:50)]Failed to open extension library system/lib/libservice_extension_module.z.so, reason: Error loading shared library system/lib/libservice_extension_module.z.so: No such file or directoryn

可知,system/lib/libservice_extension_module.z.so文件无法加载。

7.查看设备system/路径,发现其下相较于纯净3.1.2release系统,多出了一个system/lib64目录,查看目录,发现包含libservice_extension_module.z.so库文件,判断由于定制化的3.1.2release系统引入了一些需要在arm64下编译的库,所以修改了相关的编译参数,将原本需要放到system/lib下的 libservice_extension_module.z.so放到了system/lib64下,导致AMS无法读取。

8.将libservice_extension_module.z.so拷贝到system/lib下,重启设备,Launcher被正常启动。

6 知识分享

1.Launcher的启动跟AccountMgr、BMS、AMS都有关系,AccountMgr负责创建用户目录,BMS负责安装,AMS负责启动,涉及到相关问题都可以从这3个方面作为切入点。

2.即使通过arm64编译3.1.2release,system下也不会创建system/lib64目录,这点需要与3.2系统区分。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐