1 关键字

debug; 4.1Release; 应用;

2 开发环境

系统版本: 4.1-Release

DevEco Studio版本: 4.0 Release (build:4.0.0.600)

SDK版本: 4.0.10.13(及以上)

设备型号: 开发者手机

3 问题描述

在适配开发者手机4.1Release应用过程中,发现分发中心能成功安装,但是无法正常启动。

4 问题原因

开发者手机4.1Release版本系统参数const.security.developermode.state为空,而解压分发中心hap时发现其module.jsondebug配置为true

{
    "app": {
        ···
        "debug": true,
        ···
    },
}

5 解决方案

方案一 应用层解决

编译构建分发中心时,IDE的Build Mode改为release(默认为<None>)。

方案二 设备层解决

在设备shell空间里执行

param set const.security.developermode.state 1

6 定位过程

  1. 通过分析日志可发现AMS关键报错

    01-01 09:02:41.732   776  1529 E C01300/Ability: [ability_manager_service.cpp(CheckDebugAppInDeveloperMode:9019)]Debugging application cannot run in non developer mode.
    01-01 09:02:41.732   776  1529 E C01300/Ability: [ability_manager_service.cpp(StartAbilityInner:861)]Generate ability request local error.
    
  2. 根据报错信息查找到对应代码
    foundation/ability/ability_runtime/services/abilitymgr/src/ability_manager_service.cpp文件下的

    bool AbilityManagerService::CheckDebugAppInDeveloperMode(bool isDebugApp)
    {
     if (isDebugApp && !system::GetBoolParameter(DEVELOPER_MODE_STATE, false)) {
         HILOG_ERROR("Debugging application cannot run in non developer mode.");
         return false;
     }
     return true;
    }
    

    发现AMS在启动应用时会判断应用的调试类型及当前设备是否支持应用开发模式。

  3. 设备是否支持应用开发模式是根据常量

    constexpr char DEVELOPER_MODE_STATE[] = "const.security.developermode.state";
    

    来判断的。

  4. 在设备shell空间里执行

    param get | grep const.security.developermode.state
    

    发现没有此配置,因此表示该设备不支持应用开发模式。

Logo

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

更多推荐