ARM64平台Flutter环境搭建

ARM64平台Flutter环境搭建

  • Flutter简介
  • 问题背景
  • 搭建步骤
    • 1. 安装ARM64 Android Studio
    • 2. 安装Oracle的JDK
    • 3. 安装 Dart和 Flutter 开发插件
    • 4. 安装 Android SDK
    • 5. 安装 Flutter SDK
    • 6. 同意 Android 条款
    • 7. 运行 Flutter 示例项目
    • 8. 修正 aapt2 报错
    • 9. 修正 CMake 报错
    • 10. 修正 NDK 工具链报错
    • 总结

Flutter简介

Flutter 是跨平台的UI开发框架,基于 Google 的 Dart 语言开发,底层依赖交叉编译工具链将编写好的dart代码转换成 Javascript(WEB端)Java/Kotlin(Anndroid端)Object-C/Swift(IOS端), 这样 Flutter 框架站在巨人的肩膀上就完成了一次编写,多端适配的华丽转身。为了突出自身的优势,相比现有的基于 Chromium 浏览器内核的多端UI框架 React NativeElectron,在移动端 Flutter 底层基于 Dart 编译型语言直接调用 skia 渲染引擎,没有 JavaScript 语言解释的性能开销,在数据量大的 UI 交互表现上会更为出色,同时打包后的体积相比前面两者也会小一些。

问题背景

Flutter 程序交叉编译成 Android 程序,除了本身依赖 Flutter SDK 外,还依赖 Android Studio集成开发环境及其相关依赖,但是Google官方并没有推出 ARM64平台版本的 Android Studio, 我们只能借助网上的资源自力更生,不断填坑。

搭建步骤

1. 安装ARM64 Android Studio

Android Studio 本身是基于Java开发的集成开发环境(IDE), 没有ARM64版本的,我们就下载官方的 Linux X64版本的,链接如下,选择 Linux(64位) 当前版本是 2024.2.2.13

选择Linux(64位)即可

2. 安装Oracle的JDK

2024.2.2.13 版本的 Android Studio 依赖 Oracle 的 JDK,国产系统自带的JDK一般都比较旧,使用 OpenJDK 理论上也可行,但交叉编译 Android 程序的时候会有其他错误,为此下载一个较新版本的 Oracle JDK很有必要。这里推荐下载 21.0.5, 我安装在 /usr/local/jdk-21.0.5 这个目录下, 同时配置环境变量如下,配置完成后记得 source /etc/profile, 让环境变量生效。

# 文件路径 /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk-21.0.5
export PATH=$JAVA_HOME/bin:$PATH

3. 安装 Dart和 Flutter 开发插件

Oracle JDK 安装好后,解压 Android Studio 压缩包后,进入目录执行命令 ./bin/studio.sh 从命令行启动 Android Studio, 依次单击 File > Settings > Plulgins, 在Marketplace 分别搜索 DartFlutter 并单击安装按钮进行安装,下载过程需要访问Google 网站,如果下载无法成功,建议科学上网后重试。

Dart开发插件

Flutter开发插件

4. 安装 Android SDK

既然 Flutter 框架开发的程序最终需要打包成APK程序安装到 Android 手机上,自然编译打包过程中离不开 Android SDK,请结合自己手上的 Android 真机的 Android 版本,下载对应版本的 Android SDK 到指定路径 (比如我的保存位置为 /home/greatwall/android_sdk),请确保上述路径的访问和写入权限,Android Studio 对应的下载位置在 File > Settings > Languages & Frameworks, 文件比较大,请不要中途断开网络。

android SDK下载

下载完成后,请配置环境变量

# 文件路径 /etc/profile.d/android.sh, 路径请根据自身情况调整,命令行输入 source /etc/profile 让其立即生效
export ANDROID_STUDIO_HOME=/home/greatwall/work/flutter/android_studio/
export ANDROID_HOME=/home/greatwall/android_sdk
export PATH=$PATH:$ANDROID_STUDIO_HOME/bin

5. 安装 Flutter SDK

Flutter 官方也没有推出ARM64版本的 SDK, 不过GitHub已经有牛人完成适配并开源,下载链接如下:
https://github.com/zhzhzhy/Flutter-SDK-ARM64/tags
请根据自己需要,下载一个较新的版本即可;下载完成后,将压缩包解压到 /usr/local/flutter, 并配置环境变量并让其生效:

# 文件路径 /etc/profile.d/flutter.sh,命令行输入 source /etc/profile 让其立即生效
export FLUTTER_HOME=/usr/local/flutter
export PATH=$PATH:$FLUTTER_HOME/bin

6. 同意 Android 条款

运行命令 flutter doctor --android-licenses 按照提示一路输入 y,同意所有 Android 使用条款,否则后续 Flutter 项目编译会报错。

7. 运行 Flutter 示例项目

使用命令 flutter run -v, 并观察输出日志,检查是否有错误

8. 修正 aapt2 报错

aapt2 是 Android SDK自带的资源编译和打包工具,Andio Studio 安装的默认是 X86_64 平台的 aapt2,Flutter 项目编译打包的时候会报错,通过命令 file aapt2file aapt 可以发现 aapt2 和 aapt 的架构平台都是 X86_64,网上有人已经遇到相同的问题,解决方法是将编译后的 ARM64 版本替换 Android SDK安装路径下的对应版本 aapt2aapt,如果项目已经编译过,gradle 缓存中的 aapt2 也要一并替换,否则编译依旧会报错。通过命令 sudo find / -name aapt2 找到所有的 aapt2, 确保他们都是合法的 ARM64 可执行文件。

9. 修正 CMake 报错

CMake 也是 Android SDK自带的编译工具,但只有 X86_64 版本,方式也是找到同版本的 ARM64 版本 CMAKE 替换 Android SDK 中的 X86_64 版本,GitHub 上 CMake 二进制包下载链接如下: https://github.com/Kitware/CMake/releases, 下载成功后 请将 CMake 中 bin 子目录的所有文件和 share/cmake-3.22 子目录中的文件一并替换,大家可以自行根据 Flutter 编译错误提示找到缺失的文件进行替换。

CMake下载链接


比如在我电脑上出现如下报错,可以手动执行一遍命令查看 CMake 的具体输出的错误信息
在这里插入图片描述
复制一遍以上CMake相关错误提示,手动执行一遍命令如下:

/home/greatwall/android_sdk/cmake/3.22.1/bin/cmake -H/usr/local/flutter/packages/flutter_tools/gradle/src/main/groovy \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_SYSTEM_VERSION=21 \
-DANDROID_PLATFORM=android-21 \
-DANDROID_ABI=arm64-v8a \
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \
-DANDROID_NDK=/home/greatwall/android_sdk/ndk/26.3.11579264 \
-DCMAKE_ANDROID_NDK=/home/greatwall/android_sdk/ndk/26.3.11579264 \
-DCMAKE_TOOLCHAIN_FILE=/home/greatwall/android_sdk/ndk/android-ndk-r27b/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM=/home/greatwall/android_sdk/cmake/3.22.1/bin/ninja \
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/greatwall/work/flutter/irich/build/app/intermediates/cxx/Debug/3w6x2q1f/obj/arm64-v8a \
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/home/greatwall/work/flutter/irich/build/app/intermediates/cxx/Debug/3w6x2q1f/obj/arm64-v8a \
-DCMAKE_BUILD_TYPE=Debug \
-B/home/greatwall/work/flutter/irich/android/app/.cxx/Debug/3w6x2q1f/arm64-v8a -GNinja -Wno-dev --no-warn-unused-cli

10. 修正 NDK 工具链报错

修正 CMake 错误后,你会发现还是编译不过,那是因为 Android Studio 自带的 NDK 也只支持 X86_64 版本,需要重新编译ARM64 版本的 NDK 才行, 而且 NDK 的版本要和 Flutter 项目中指定的保持一致。Github 上相关移植 NDK 的链接可供参考:
https://github.com/lzhiyong/termux-ndk/releases/tag/android-ndk

ARM64 Android NDK下载

总结

通过以上配置和排错过程,我们发现主要影响 Flutter 工程在 ARM64 环境的编译因素是 Android 相关环境的依赖不支持 ARM64 平台,因此替换所有报错的组件为相同 ARM64 版本,问题即可解决。编译 Flutter IOS版本不存在这些问题,因为 IOS 版本的Flutter 项目编译,必须在 IOS 系统下进行,还需要 IOS 开发者账号才能开发调试。

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

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

相关文章

selenium clear()方法清除文本框内容

在使用Selenium进行Web自动化测试时,清除文本框内容是一个常见的需求。这可以通过多种方式实现,取决于你使用的是哪种编程语言(如Python、Java等)以及你的具体需求。以下是一些常见的方法: 1. 使用clear()方法 clear…

基于海思soc的智能产品开发(视频的后续开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们讨论了camera,也讨论了屏幕驱动,这些都是基础的部分。关键是,我们拿到了这些视频数据之后,…

vue3+webOffice合集

1、webOffice 初始化 1)officeType: 文档位置:https://solution.wps.cn/docs/web/quick-start.html#officetype 2)appId: 前端使用appId 后端需要用到AppSecret 3)fileId: 由后端返回,前端无法生成,与上传文…

2025牛客寒假算法营2

A题 知识点&#xff1a;模拟 打卡。检查给定的七个整数是否仅包含 1,2,3,5,6 即可。为了便于书写&#xff0c;我们可以反过来&#xff0c;检查这七个整数是否不为 4 和 7。 时间 O(1)&#xff1b;空间 O(1)。 #include <bits/stdc.h> using namespace std;signed main()…

记录一次k8s起不来的排查过程

我在k8s集群&#xff0c;重启了一个node宿主机&#xff0c;竟然发现kubelet起不来了&#xff01;报错如下 这个报错很模糊&#xff0c;怎么排查呢。这样&#xff0c;开两个界面&#xff0c;一个重启kubelet&#xff0c;一个看系统日志(/var/log/message:centos&#xff0c;/va…

Docker Desktop 在Windows 环境中开发、测试和运行容器化的应用程序

Docker 为 Windows 提供了专门的桌面版工具&#xff0c;称为 Docker Desktop&#xff0c;它允许你在 Windows 环境中开发、测试和运行容器化的应用程序。 如何在 Windows 上使用 Docker Docker Desktop Docker Desktop 是一个专为 Windows 设计的应用程序&#xff0c;它简化了…

仿 RabbitMQ 的消息队列3(实战项目)

七. 消息存储设计 上一篇博客已经将消息统计文件的读写代码实现了&#xff0c;下一步我们将实现创建队列文件和目录。 实现创建队列文件和目录 初始化 0\t0 这样的初始值. //创建队列对应的文件和目录&#xff1a;public void createQueueFile(String queueName) throws IO…

HTTP 配置与应用(局域网)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新HTTP 配置与应用&#xff08;不同网段&#xff09;。 我是一个萌新小白&#xf…

root用户Linux银河麒麟服务器安装vnc服务

安装必要桌面环境组件 yum install mate-session-manager -y mate-session #确定是否安装成功安装vnc服务器 yum install tigervnc-server -y切换到root为root得vnc设置密码 su root vncpasswd给root用户设置vnc服务器文件 vi /etc/systemd/system/vncserver:1.service [Un…

理解深度学习pytorch框架中的线性层

文章目录 1. 数学角度&#xff1a; y W x b \displaystyle y W\,x b yWxb示例 2. 编程实现角度&#xff1a; y x W T b \displaystyle y x\,W^T b yxWTb3. 常见错误与易混点解析4. 小结参考链接 在神经网络或机器学习的线性层&#xff08;Linear Layer / Fully Connect…

C#Object类型的索引,序列化和反序列化

前言 最近在编写一篇关于标准Mes接口框架的文章。其中有一个非常需要考究的内容时如果实现数据灵活和可使用性强。因为考虑数据灵活性&#xff0c;所以我一开始选取了Object类型作为数据类型&#xff0c;Object作为数据Value字段&#xff0c;String作为数据Key字段&#xff0c…

大模型应用与部署 技术方案

大模型应用与部署 技术方案 一、引言 人工智能蓬勃发展,Qwen 大模型在自然语言处理领域地位关键,其架构优势尽显,能处理文本创作等多类复杂任务,提供优质交互。Milvus 向量数据库则是向量数据存储检索利器,有高效索引算法(如 IVF_FLAT、HNSWLIB 等)助力大规模数据集相似…

【Prometheus】Prometheus如何监控Haproxy

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

C# 控制打印机:从入门到实践

在开发一些涉及打印功能的应用程序时&#xff0c;使用 C# 控制打印机是一项很实用的技能。这篇文章就来详细介绍下如何在 C# 中实现对打印机的控制。 一、准备工作 安装相关库&#xff1a;在 C# 中操作打印机&#xff0c;我们可以借助System.Drawing.Printing命名空间&#x…

Go语言中的值类型和引用类型特点

一、值类型 值类型的数据直接包含值&#xff0c;当它们被赋值给一个新的变量或者作为参数传递给函数时&#xff0c;实际上是创建了原值的一个副本。这意味着对新变量的修改不会影响原始变量的值。 Go中的值类型包括&#xff1a; 基础类型&#xff1a;int&#xff0c;float64…

GPT 结束语设计 以nanogpt为例

GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候&#xff0c;可能会遇到一些性能问题&#xff0c;即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制&#xff0c…

《探秘:人工智能如何为鸿蒙Next元宇宙网络传输与延迟问题破局》

在元宇宙的宏大愿景中&#xff0c;流畅的网络传输和低延迟是保障用户沉浸式体验的关键。鸿蒙Next结合人工智能技术&#xff0c;为解决这些问题提供了一系列创新思路和方法。 智能网络监测与预测 人工智能可以实时监测鸿蒙Next元宇宙中的网络状况&#xff0c;包括带宽、延迟、…

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…

五国十五校联合巨献!仿人机器人运动与操控:控制、规划与学习的最新突破与挑战

作者&#xff1a; Zhaoyuan Gu, Junheng Li, Wenlan Shen, Wenhao Yu, Zhaoming Xie, Stephen McCrory, Xianyi Cheng, Abdulaziz Shamsah, Robert Griffin, C. Karen Liu, Abderrahmane Kheddar, Xue Bin Peng, Yuke Zhu, Guanya Shi, Quan Nguyen, Gordon Cheng, Huijun Gao,…