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进行编译构建。
由于时间关系,下次持续更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flink的java.lang.IllegalStateException: Buffer pool is destroyed 异常

背景 最近flink的在线应用出现错误java.lang.IllegalStateException: Buffer pool is destroyed&#xff0c;本文记录下这个错误的原因 错误原因 详细的日志堆栈如下: Caused by: java.lang.IllegalStateException: Buffer pool is destroyed. at org.apache.flink.runtime…

Ps:画笔工具的基本操作

画笔工具 Brush Tool是 Ps 中最常用的工具&#xff0c;广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行&#xff0c;但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Ps 中许多…

CSS-长度单位篇

px&#xff1a;像素em&#xff1a;相对元素font-size的倍数rem&#xff1a;相对根字体大小&#xff0c;html标签就是根%&#xff1a;相对父元素计算 注意&#xff1a;CSS中设置长度&#xff0c;必须加单位&#xff0c;否则样式无效&#xff01;

Maven - 打包之争:Jar vs. Shade vs. Assembly

文章目录 Pre概述Jar 打包方式_maven-jar-pluginOverview使用官方文档 Shade 打包方式_maven-shade-pluginOverview使用将部分jar包添加或排除将依赖jar包内部资源添加或排除自动将所有不使用的类排除将依赖的类重命名并打包进来 &#xff08;隔离方案&#xff09;修改包的后缀…

ElasticSearch之cat component templates API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/component_templates?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; name …

Qt/QML编程学习之心得:一个QML工程的学习笔记(十)

前言: 到底什么是Qt Quick呢?因为Qt Quick是Qt新引入的,Qt Quick由Qt Quick模块提供,它是一个编写QML应用的标准库。Qt Quick模块提供了两种接口:使用QML语言创建应用的QML接口和使用C++语言扩展QML的C++接口。使用Qt Quick模块,设计人员和开发人员可以轻松地构建流畅的…

【自主探索】基于 frontier_exploration 的单个机器人自主探索建图

文章目录 一、概述1、功能2、要求 二、使用方法1、用于运行演示2、用于开发人员2.1. 探索无/地图数据2.2. 使用 /map 数据进行探索 三、提供的组件1、explore_client1.1. 调用的操作1.2. 订阅主题1.3. 发布主题 2、explore_server2.1. 提供的操作2.2. 调用的操作2.3. 调用的服务…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷6

1、将一个空塑料袋与一个装满空气的塑料袋放到秤上称重。在两个塑料袋本身完全一样的情况下&#xff0c;得出的结果会是 A、空塑料袋更重 B、装满空气的塑料袋更重 C、两个塑料袋一样重 D、无法判断 答案&#xff1a;C 2、全球变暖带来的一个主要影响就是海平面的上升。造…

web前端开发基础----标准流布局和非标准流布局

1&#xff0c;标准流布局 标准流&#xff0c;也称文档流或普通流&#xff0c;是所有元素默认的布局方式。 在标准流中&#xff0c;元素按照其在 HTML 中出现的顺序&#xff0c;自上而下依次排列&#xff0c;并占据其父容器内的可用空间。 标准流中的元素按照其自然尺寸和位置进…

uniapp实现多时间段设置

功能说明&#xff1a; 1 点击新增时间&#xff0c;出现一个默认时间段模板&#xff0c;不能提交 2 点击“新增时间文本”&#xff0c;弹出弹窗&#xff0c;选择时间&#xff0c;不允许开始时间和结束时间同时为00:00&#xff0c; <view class"item_cont"> …

TCP/IP协议:最流行的电子邮件协议SMTP(简单邮件传输协议)详解

SMTP 是一种电子邮件协议&#xff0c;用于通过互联网从一个电子邮件帐户向另一个电子邮件帐户发送电子邮件。它是TCP/IP协议应用层的一部分。作为一种电子邮件协议&#xff0c;它建立了不同电子邮件客户端和帐户之间轻松信息交换的规则。这样&#xff0c;简单邮件传输协议就可以…

求最小的起始正整数

题目描述 给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。 你需要从左到右遍历 nums 数组&#xff0c;并将 startValue 依次累加上 nums 数组中的值。 请你在确保累加和始终大于等于 1 的前提下&#xff0c;选出一个最小的 正数 作为 startValue 。…

【Rust 日报】2023-11-23 - egui 0.24 发布

项目 - egui 0.24 发布 egui 是一个易于使用的 Rust GUI 库&#xff0c;支持在本地环境和浏览器中运行。 egui 0.24 的重要新特性是多视窗功能。在支持的后端上&#xff08;如eframe&#xff09;&#xff0c;用户可以利用全新的 viewport API 同时生成多个本机窗口。 此外&…

Git 的基本概念和使用方式。

Git 是一个开源的分布式版本控制系统&#xff0c;它可以记录代码的修改历史&#xff0c;跟踪文件的版本变化&#xff0c;并支持多人协同开发。Git 的基本概念包括&#xff1a; 1. 仓库&#xff08;Repository&#xff09;&#xff1a;存放代码和版本历史记录的地方。 2. 分支…

ArkUI开发进阶—@Builder函数@BuilderParam装饰器的妙用与场景应用

ArkUI开发进阶—@Builder函数@BuilderParam装饰器的妙用与场景应用 HarmonyOS,作为一款全场景分布式操作系统,为了推动更广泛的应用开发,采用了一种先进而灵活的编程语言——ArkTS。ArkTS是在TypeScript(TS)的基础上发展而来,为HarmonyOS提供了丰富的应用开发工具,使开…

Educational Codeforces Round 158 (Rated for Div. 2)(A~E)(贪心,树形DP)

A - Line Trip 题意&#xff1a;有一条路&#xff0c;可以用一条数线来表示。你位于数线上的点 0 &#xff0c;你想从点 0 到点 x &#xff0c;再回到点 0。你乘汽车旅行&#xff0c;每行驶 1个单位的距离要花费 1 升汽油。当您从点 0出发时&#xff0c;汽车已加满油(油箱中的…

麒麟linux离线安装dotnet core

1. 下载 dotnet core,以3.1为例 下载地址: 下载 .NET Core 3.1 (Linux、macOS 和 Windows) 查看linux cpu类型,然后根据类型下载 uname -m #结果是: aarch64 2. 放到指定目录,比如:/usr/dotnet 3. 解压dotnet-sdk-3.1.426-linux-arm64.tar.gz cd /usr/dotnet tar –zxvf a…

告别算法暗处:备案带来的光明未来

在当今数字化时代&#xff0c;算法已经成为了企业发展和创新的关键推动力。然而&#xff0c;伴随着算法的广泛应用&#xff0c;数据隐私、知识产权和法规合规等问题也引发了越来越多的关切。为了解决这些问题&#xff0c;越来越多的公司开始意识到算法备案的重要性。本文将深入…

点云从入门到精通技术详解100篇-基于深度学习的稀疏点云障碍物检测(续)

目录 3.1 连续帧点云空间特征融合 3.1.1 点云预处理 3.1.2 地面分割 3.1.3 自适应点云聚类

播放器开发(三):FFmpeg与SDL环境配置

学习课题&#xff1a;逐步构建开发播放器【QT5 FFmpeg6 SDL2】 环境配置 我这边的是使用macOS&#xff1b;IDE用的是CLion&#xff1b;CMake构建&#xff0c;除了创建项目步骤、CMakeLists文件有区别之外的代码层面不会有太大区别。 配置上只添加一下CMakeLists中FFmpeg和SD…