HarmonyOS鸿蒙Next中通过bm工具获取appIdentifier失败

HarmonyOS鸿蒙Next中通过bm工具获取appIdentifier失败 【问题描述】:手动签名的项目通过bm工具获取appIdentifier失败,调用bundleManager.getBundleInfoForSelf获取也失败了。新建了一个项目,自动签名,通过bm工具获取appIdentifier也失败,但是调用bundleManager.getBundleInfoForSelf获取成功了。这个怎么排查是哪里出现的问题?

【问题现象】:

cke_17773.png

【版本信息】:

DevEco Studio 6.0.0 Release

构建版本:6.0.0.858, built on September 24, 2025

Runtime version: 21.0.6+8-b631.39 amd64 (JCEF 122.1.9)

VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

Toolkit: sun.awt.windows.WToolkit

Windows 11.0

GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation

Memory: 2048M

Cores: 12

Registry:

idea.plugins.compatible.build=IC-243.24978.46


更多关于HarmonyOS鸿蒙Next中通过bm工具获取appIdentifier失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

开发者您好,这边使用IDE: DevEco Studio 6.0.0 Release,真机版本6.0.0.100,不管是调用bundleManager.getBundleInfoForSelf获取,还是使用通过bm工具获取:

hdc shell
# 需将com.example.myapplication替换为实际应用的包名
bm dump -n com.example.myapplication | grep appIdentifier

手动签名和自动签名都是可以获取的,示例代码如下:

import { bundleManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  aboutToAppear(): void {
    let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION | bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO;
    try {
      bundleManager.getBundleInfoForSelf(bundleFlags).then((bundleInfo:bundleManager.BundleInfo) => {
        console.info('testTag', 'getBundleInfoForSelf successfully. appIdentifier: %{public}s', bundleInfo.signatureInfo.appIdentifier);
      }).catch((err: BusinessError) => {
        console.error('testTag', 'getBundleInfoForSelf failed. Cause: %{public}s', err.message);
      });
    } catch (err) {
      let message = (err as BusinessError).message;
      console.error('testTag', 'getBundleInfoForSelf failed: %{public}s', message);
    }
  }

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.message = 'Welcome';
        });
    }
    .height('100%')
    .width('100%');
  }
}

麻烦您这边提供下能复现问题的真机版本信息吧。

更多关于HarmonyOS鸿蒙Next中通过bm工具获取appIdentifier失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我是用模拟器操作的,包名我是写的我应用的包名,

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

模拟器的版本是Mate 70 Pro HarmonyOS 6.0.0(20),

在HarmonyOS Next中,使用bm工具获取appIdentifier失败,通常是由于以下原因:

  1. 应用未正确签名或签名文件路径错误。
  2. bm工具命令参数不完整或格式有误。
  3. 应用配置文件(如app.json5)中的bundleName等信息未正确配置。
  4. 使用的SDK或工具版本与HarmonyOS Next不兼容。

请检查签名配置、命令参数和配置文件,并确保开发环境版本匹配。

根据你描述的情况,手动签名和自动签名的项目在获取 appIdentifier 时表现不同,这通常与应用的签名配置和Bundle信息直接相关。

核心排查点:签名与Bundle的一致性

  1. 手动签名项目的问题根源

    • 签名文件不匹配:请检查在 build-profile.json5 文件中配置的 signingConfig 路径和密码是否正确,确保使用的 .p7b 签名文件与当前项目匹配。
    • 未生成完整的HAPbm 工具需要基于已签名的HAP包来获取信息。请确认你已对项目执行了 Build > Build Hap(s)/App(s) > Build Hap(s) 操作,并且使用的是生成的、带有签名的HAP文件(通常位于 build/outputs/default/ 目录下)。
    • bm命令参数错误:执行 bm 工具时,请确保命令格式和路径正确。基本命令格式为:
      bm get --bundle-name [你的Bundle名称] --mode appIdentifier
      
      或者直接对HAP文件操作:
      bm get -p [你的HAP文件完整路径] --mode appIdentifier
      
  2. 自动签名项目成功的原因

    • DevEco Studio的自动签名机制会为调试版本自动生成并应用有效的调试证书。这保证了应用Bundle信息(包括 appIdentifier)在安装和运行时可以被系统正确识别,因此 bundleManager.getBundleInfoForSelf API 调用能够成功。

排查步骤建议

  • 对于手动签名项目

    • 首先,在DevEco Studio中打开 build-profile.json5,核对 signingConfigs 下的 storePathstorePasswordkeyAliaskeyPassword 配置项。
    • 执行完整的HAP构建,并确认输出目录中的HAP文件是已签名的。
    • 在终端中,导航到HAP文件所在目录,使用上述 bm get -p 命令直接指定该HAP文件路径来获取 appIdentifier,这可以排除Bundle名称参数错误的影响。
  • API调用失败分析

    • bundleManager.getBundleInfoForSelf 在手动签名项目中失败,通常意味着应用运行时使用的签名与系统记录的不符,或者应用本身未正确安装。请确保设备上安装的是你最新构建并手动签名的HAP,而不是一个旧版本或自动签名版本。

总结

问题的焦点在于手动签名的完整性和一致性。请将排查重点放在签名配置、HAP构建产物以及 bm 工具的命令参数上。确保从构建到安装的整个链条都使用了同一套正确的签名。

回到顶部