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
可以在oh-package.json5配置文件中增加x86_64架构配置,如果不行的话,麻烦提供一下问题日志。
【背景知识】
- FlutterModule是一种将Flutter集成到现有应用(ohos/iOS/Android)中的解决方案,允许开发者逐步采用 Flutter而不需要完全重写现有应用,具体可参照文档:HarmonyOS化Flutter如何使用混合开发module。
- HarmonyOS化3.22版本Flutter在后续提交中修改了集成方式:相关PR:[3.22]修改flutter build har命令复制的har文件和flutter_module的使用说明。
【解决方案】 使用HarmonyOS化3.22版本Flutter,集成flutter_module方式如下:
- 方案一:以Har文件形式引用。
- 在flutter_module目录执行
flutter build har --debug/release命令,生成flutter_module.har; - 将flutter_module根目录下build\ohos\har\debug(若使用release编译命令,则为build\ohos\har\release文件夹)中的Har包拷贝至MyApplication项目;
- 打开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", // ... } - 打开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": "", } - 使用Deveco Studio配置MyApplication的签名;
- 运行MyApplication。
- 在flutter_module目录执行
更多关于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-v8a和armeabi-v7a架构。重新构建HAR包后即可在真机上运行。
在HarmonyOS Next中集成Flutter三方库时遇到x86_64架构问题,是因为Flutter默认构建的har包可能包含多架构支持,而HarmonyOS真机(如手机)通常使用ARM架构(armeabi-v7a或arm64-v8a)。x86_64架构通常用于模拟器或桌面环境,导致真机无法运行。
解决方案:
- 检查Flutter构建配置:确认Flutter的构建目标是否为HarmonyOS真机架构。可通过修改Flutter构建脚本或配置,指定仅生成ARM架构的库文件。
- 调整har构建命令:尝试在构建har时明确指定目标架构,例如添加
--target-platform参数(具体参数需根据Flutter工具链支持情况调整)。 - 手动移除x86_64依赖:如果har包中已包含x86_64库文件,可解压har包,删除lib/x86_64目录下的相关文件,重新打包测试。
- 联系库维护者:若三方库fluttertpc_get本身未适配HarmonyOS架构,建议反馈给库作者,请求提供ARM架构的版本或源码自行编译。
注意:HarmonyOS Next对Flutter的支持仍在完善中,部分三方库可能存在兼容性问题。建议优先使用官方推荐的库或已验证的HarmonyOS适配版本。

