HarmonyOS鸿蒙Next中集成fluttertpc_get时flutter build har--debug打成har发现涉及x86_64架构无法用真机跑app

HarmonyOS鸿蒙Next中集成fluttertpc_get时flutter build har–debug打成har发现涉及x86_64架构无法用真机跑app 【问题描述】: 项目基于flutter get架构编写的项目,按照提供的三方库flutter/packages信息(涉及新/旧版本)查到有个flutterpc_get对应版本,集成时flutter build har–debug打成har发现涉及x86_64架构无法用真机跑app。

【问题现象】:运行指令:flutter build har --debug打成har后看到x86_64相关配置,运行.ohos内项目运行失败。

【版本信息】:3.22-ohos

【复现代码】:暂时无法提供

【尝试解决方案】:暂无


更多关于HarmonyOS鸿蒙Next中集成fluttertpc_get时flutter build har--debug打成har发现涉及x86_64架构无法用真机跑app的实战教程也可以访问 https://www.itying.com/category-92-b0.html

4 回复

可以在oh-package.json5配置文件中增加x86_64架构配置,如果不行的话,麻烦提供一下问题日志。

【背景知识】

【解决方案】 使用HarmonyOS化3.22版本Flutter,集成flutter_module方式如下:

  • 方案一:以Har文件形式引用。
    1. 在flutter_module目录执行flutter build har --debug/release命令,生成flutter_module.har;
    2. 将flutter_module根目录下build\ohos\har\debug(若使用release编译命令,则为build\ohos\har\release文件夹)中的Har包拷贝至MyApplication项目;
    3. 打开MyApplication\oh-package.json5,重写flutter,flutter_module与插件依赖:
      "overrides": {
          // 如果工程级build-profile.json5文件的useNormalizedOHMUrl字段为true,则oh-package.json5中依赖的包使用的别名需要和依赖包的oh-package.json5的name保持一致,否则编译会报错
         "@ohos/flutter_ohos": "file:path/to/flutter_embedding_debug.har",
         "flutter_native_arm64_v8a": "file:path/to/arm64_v8a_debug.har",
         // 可选项,在项目需要支持X86_64架构时添加
         "flutter_native_x86_64": "file:path/to/x86_64_debug.har",
         "@ohos/flutter_module": "file:path/to/flutter_module.har",
         "plugin_x": "file:path/to/plugin_x.har",
         // ...
       }
      
    4. 打开MyApplication\entry\oh-package.json5,添加flutter与flutter_module依赖:
      "dependencies": {
         "@ohos/flutter_ohos": "",
         "flutter_native_arm64_v8a": "",
         // 可选项,在项目需要支持X86_64架构时添加
         "flutter_native_x86_64": "",
         "@ohos/flutter_module": "",
       }
      
    5. 使用Deveco Studio配置MyApplication的签名;
    6. 运行MyApplication。

更多关于HarmonyOS鸿蒙Next中集成fluttertpc_get时flutter build har--debug打成har发现涉及x86_64架构无法用真机跑app的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


背景知识:

1、架构不匹配

鸿蒙真机普遍为ARM64架构,而x86_64通常用于模拟器1。若构建时配置中包含x86_64的ABI支持,生成的HAR包可能包含不兼容的二进制文件。

2、三方库适配问题

fluttertpc_get或其依赖的三方库可能未完全适配鸿蒙ARM64架构,或构建时错误拉取了x86_64分支代码。

3、构建配置错误

build-profile.json5中targetAbi字段可能误配置为x86_64,或未明确指定目标架构。

问题解决:

1. 调整ABI配置

在模块级build-profile.json5中,确保targetAbi仅包含arm64-v8a:

{
  "buildOption": {
    "artifactType": "obfuscation",
    "targetAbi": ["arm64-v8a"] // 移除x86_64配置
  }
}

2. 清理并重新构建

执行以下命令清理缓存并重新生成HAR包:

flutter clean
flutter pub get
flutter build har --debug  # 确保未添加x86参数

3. 检查三方库分支

若fluttertpc_get依赖特定分支(如br_xxx),确认该分支是否包含鸿蒙ARM64适配:

# pubspec.yaml
dependencies:
  fluttertpc_get:
    git:
      url: https://xxx.git
      ref: br_arm64_hos  # 指定适配分支

4. 验证HAR包内容

检查生成的HAR包中是否包含arm64二进制文件(如libflutter.so),路径通常为:

your_module/har/arm64-v8a_release.har

5. 修改Flutter代码兼容性

在main.dart中避免使用Platform.isXxx等平台检测代码(可能触发架构误判):

// 避免使用以下代码
if (Platform.isAndroid || Platform.isOhos) {
  // 可能引发x86_64兼容性问题
}

在HarmonyOS Next中,Flutter的tpc_get插件在构建HAR包时默认包含x86_64架构,导致无法在ARM架构的真机上运行。解决方法是在Flutter项目的android/app/build.gradle文件中,为HarmonyOS平台添加abiFilters配置,仅保留arm64-v8aarmeabi-v7a架构。重新构建HAR包后即可在真机上运行。

在HarmonyOS Next中集成Flutter三方库时遇到x86_64架构问题,是因为Flutter默认构建的har包可能包含多架构支持,而HarmonyOS真机(如手机)通常使用ARM架构(armeabi-v7a或arm64-v8a)。x86_64架构通常用于模拟器或桌面环境,导致真机无法运行。

解决方案:

  1. 检查Flutter构建配置:确认Flutter的构建目标是否为HarmonyOS真机架构。可通过修改Flutter构建脚本或配置,指定仅生成ARM架构的库文件。
  2. 调整har构建命令:尝试在构建har时明确指定目标架构,例如添加--target-platform参数(具体参数需根据Flutter工具链支持情况调整)。
  3. 手动移除x86_64依赖:如果har包中已包含x86_64库文件,可解压har包,删除lib/x86_64目录下的相关文件,重新打包测试。
  4. 联系库维护者:若三方库fluttertpc_get本身未适配HarmonyOS架构,建议反馈给库作者,请求提供ARM架构的版本或源码自行编译。

注意:HarmonyOS Next对Flutter的支持仍在完善中,部分三方库可能存在兼容性问题。建议优先使用官方推荐的库或已验证的HarmonyOS适配版本。

回到顶部