当前位置: 首页 > news >正文

flutter编译和构建鸿蒙应用程序(windows环境)

flutter编译和构建鸿蒙应用程序(windows环境)

问题背景

针对 OpenHarmony 的 Flutter 版本已经开源,参考 https://gitee.com/openharmony-sig/flutter_flutter。
本文为实践该流程,实现flutter打包鸿蒙hap包的流程。目前流程已经走完,不过最后打包hap包依赖于flutter engine构建,目前还没构建完成。下次持续更新。

问题分析

构建环境:

flutter tools指令支持Linux、Mac和Windows下使用。

构建依赖:

依赖flutter engine(https://github.com/flutter/engine)构建产物:ohos_debug_unopt_arm64 与 ohos_release_arm64,请在flutter tools指令运行参数中添加:–local-engine=<engine产物目录>

构建步骤:

1、下载命令行工具,并配置环境变量ohpm与sdkmanager,

下载地址: https://developer.harmonyos.com/cn/develop/deveco-studio#download_cli ,使用指导: https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ide-command-line-ohpm-0000001490235312-V3
(1)解压文件,进入“ohpm/bin”目录,打开命令行工具,执行OHPM安装脚本,
Windows环境下执行命令:
init.bat
在这里插入图片描述

(2)将ohpm配置到环境变量中
Windows环境变量设置方法:
在此电脑 > 属性 > 高级系统设置 > 高级 > 环境变量中,在系统或者用户的PATH变量中,添加ohpm安装位置下bin文件夹的路径。(bin路径配置了ohpm、ohsdkmgr、codelinter三个工具,如下图所示)。
在这里插入图片描述

配置环境变量:
OHPM_HOME

...\ohcommandline-tools-windows-2.0.0.2\oh-command-line-tools\ohpm

(3)安装完成之后,重新打开命令行,执行如下命令
ohpm -v
终端输出为版本号,则表示安装成功。执行效果如下:
在这里插入图片描述

2、下载sdk并配置环境变量,

ohsdkmgr使用指导,(参考 https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ide-command-line-ohsdkmgr-0000001545647965-V3)
在这里插入图片描述

注意:使用ohsdkmgr要求java版本必须大于17,java17的安装和配置参考 https://blog.csdn.net/tiehou/article/details/129575138 。
(1)下载api为9的sdk
在这里插入图片描述

(2)配置对应的环境变量:

export OHOS_SDK_HOME=/home/<user>/env/sdk
export HDC_HOME=/home/<user>/env/sdk/10/toolchains
export PATH=$PATH:$HDC_HOME# 配置HarmonyOS sdk
export HOS_SDK_HOME=/home/<user>/env/{HarmonyOS sdk}
3、置Gradle:

下载 gradle 7.1 并解压,配置到环境变量中。gradle下载地址: https://gradle.org/releases/
配置到环境变量:
PATH=/home/<user>/env/gradle-7.1/bin

4、下载Flutter,

下载完成后配置环境:

git clone https://gitee.com/openharmony-sig/flutter_flutter.gitexport PATH=/home/<user>/ohos/flutter_flutter/bin:$PATH
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
5、签名工具需进行下列配置

(1)下载签名工具(下载地址: https://gitee.com/openharmony/developtools_hapsigner,下载命令: git clone https://gitee.com/openharmony/developtools_hapsigner.git),并配置环境变量SIGN_TOOL_HOME。
export SIGN_TOOL_HOME=/home/<user>/ohos/developtools_hapsigner/autosign
(2)进入…\developtools_hapsigner\hapsigntool目录,执行以下命令编译得到hap-sign-tool.jar,确保其在目录:./hapsigntool/hap_sign_tool/build/libs/hap-sign-tool.jar。

gradle build

在这里插入图片描述

在这里插入图片描述

注意:刚才配置了jdk版本为17,目前这个代码选择的gradle版本为7.1,对应的jdk版本需要配置还原1.8的版本。
(3)编辑autosign目录下autosign.config和createAppCertAndProfile.config文件,并修改其中值:

sign.profile.inFile=profile_tmp.json

在autosign目录下,新增profile_tmp_template.json文件,编辑如下:

{"version-name": "2.0.0","version-code": 2,"app-distribution-type": "os_integration","uuid": "5027b99e-5f9e-465d-9508-a9e0134ffe18","validity": {"not-before": 1594865258,"not-after": 1689473258},"type": "release","bundle-info": {"developer-id": "OpenHarmony","distribution-certificate": "-----BEGIN CERTIFICATE-----\nMIICSTCCAc+gAwIBAgIFAJV7uNUwCgYIKoZIzj0EAwIwYzELMAkGA1UEBhMCQ04x\nFDASBgNVBAoMC09wZW5IYXJtb255MRkwFwYDVQQLDBBPcGVuSGFybW9ueSBUZWFt\nMSMwIQYDVQQDDBpPcGVuSGFybW9ueSBBcHBsaWNhdGlvbiBDQTAeFw0yMjAxMjkw\nNTU0MTRaFw0yMzAxMjkwNTU0MTRaMGgxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtP\ncGVuSGFybW9ueTEZMBcGA1UECwwQT3Blbkhhcm1vbnkgVGVhbTEoMCYGA1UEAwwf\nT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUmVsZWFzZTBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABAW8pFu7tHGUuWtddD5wvazc1qN8ts9UPZH4pecbb/bSFWKh7X7R\n/eTVaRrCTSSdovI1dhoV5GjuFsKW+jT2TwSjazBpMB0GA1UdDgQWBBScyywAaAMj\nI7HcuIS42lvZx0Lj+zAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUE\nDDAKBggrBgEFBQcDAzAYBgwrBgEEAY9bAoJ4AQMECDAGAgEBCgEAMAoGCCqGSM49\nBAMCA2gAMGUCMFfNidGo6uK6KGT9zT1T5bY1NCHTH3P3muy5X1xudOgxWoOqIbnk\ntmQYB78dxWEHLQIxANfApAlXAD/0hnyNC8RDzfLOPEeay6jU9FXJj3AoR90rwZpR\noN9sYD6Oks4VGRw6yQ==\n-----END CERTIFICATE-----\n","bundle-name": "{{ohosId}}","apl": "normal","app-feature": "hos_normal_app"},"acls": {"allowed-acls": [""]},"permissions": {"restricted-permissions": []},"issuer": "pki_internal"
}
6、构建

(1)运行 flutter doctor -v 检查环境变量配置是否正确
(2)创建工程

# 创建工程
flutter create --platforms ohos flutter_demo

执行上面的创建工程命令,报错提示需要鸿蒙的sdk。
在这里插入图片描述

这里我之前下载过鸿蒙版的deveco studio开发过鸿蒙原生项目,环境变量直接增加直接鸿蒙的sdk,重新创建项目OK。
在这里插入图片描述

(3)编译命令,编译产物在flutter_demo/ohos/entry/build/default/outputs/default/entry-default-signed.hap下。

# 进入工程根目录编译
flutter build hap --local-engine-src-path /home/<user>/ohos/engine/src --local-engine ohos_release_arm64

编译依赖flutter engine的编译产物,所以我们在编译项目之前要先对flutter engine进行编译构建。
由于时间关系,下次持续更新。

相关文章:

  • 卸载软件最最最彻底的工具——Uninstall Tool
  • 项目启动出现白屏问题需要刷新后才能显示解决方案
  • 通付盾Web3专题 | SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式
  • 代码随想录算法训练营第五十三天|1143. 最长公共子序列、1035.不相交的线、53.最大子数组和
  • 实用高效 无人机光伏巡检系统助力电站可持续发展
  • 【代码随想录刷题】Day18 二叉树05
  • 【开源】基于Vue和SpringBoot的食品生产管理系统
  • 黑马点评Redis笔记
  • word因导入mathtype不能使用复制粘贴(ctrl+c, ctrl+v)快捷键的解决方法
  • oracle数据库巡检常见脚本-系列二
  • 注意力机制(Q,K,V)基本概念
  • Redis当中的BitMap,实现github打卡功能
  • NX二次开发UF_CURVE_create_arc_3tangent 函数介绍
  • 前端入职环境安装
  • Java8实战-总结49
  • JS 中的深拷贝与浅拷贝
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【node学习】协程
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 30天自制操作系统-2
  • isset在php5.6-和php7.0+的一些差异
  • Linux快速复制或删除大量小文件
  • log4j2输出到kafka
  • Meteor的表单提交:Form
  • PHP那些事儿
  • v-if和v-for连用出现的问题
  • Vue 2.3、2.4 知识点小结
  • Vue实战(四)登录/注册页的实现
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从零开始学习部署
  • 基于webpack 的 vue 多页架构
  • 看域名解析域名安全对SEO的影响
  • 如何选择开源的机器学习框架?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序:实现悬浮返回和分享按钮
  • 问题之ssh中Host key verification failed的解决
  • 一文看透浏览器架构
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • !!java web学习笔记(一到五)
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (3)nginx 配置(nginx.conf)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (第27天)Oracle 数据泵转换分区表
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三分钟)速览传统边缘检测算子
  • (十六)Flask之蓝图
  • (转载)从 Java 代码到 Java 堆
  • (转载)虚函数剖析
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献