ARM64平台Flutter环境搭建

news2025/1/25 20:32:29

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.coloradmin.cn/o/2281561.html

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

相关文章

MySQL5.7安装超详细步骤(图文教程)

一.下载MySQL 1.在浏览器搜索MySQL,进入MySQL官网,点击下载,选下面的社区版本。 官网地址:MySQL :: Download MySQL Installer (Archived Versions) 二.安装MySQL 1.双击下载好的文件,选择自定义安装,然…

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…

语音转文字的先驱-认识Buzz的前世今生

Buzz 是一款基于 OpenAI Whisper 模型开发的开源语音转文字工具,其历史可以追溯到 Whisper 模型的推出,并在之后逐渐发展为一个功能强大且广泛使用的工具。以下是关于 Buzz 的详细历史介绍: 1. Whisper 模型的背景 Buzz 的核心是 OpenAI 开…

WPF5-x名称空间

1. x名称空间2. x名称空间内容3. x名称空间内容分类 3.1. x:Name3.2. x:Key3.3. x:Class3.4. x:TypeArguments 4. 总结 1. x名称空间 “x名称空间”的x是映射XAML名称空间时给它取的名字(取XAML的首字母),里面的成员(如x:Class、…

JavaWeb开发学习笔记——MySQL

跟着黑马程序员学习MySQLDay06-04. MySQL-DDL-数据库操作_哔哩哔哩_bilibili 注意,以下笔记中[ ]中都是可省略内容,如果不省略,那么直接写即可,不带[ ] MySQL-DDL 数据库操作 连接MySQL服务器:mysql -uroot -p密码…

CSS实现实现票据效果 mask与切图方式

一、“切图”的局限性 传统的“切图”简单暴力,但往往缺少适应性。 适应性一般有两种,一是尺寸自适应,二是颜色可以自定义。 举个例子,有这样一个优惠券样式 关于这类样式实现技巧,之前在这篇文章中有详细介绍: CSS 实现优惠券的技巧 不过这里略微不一样的地方是,两个…

【二叉树的深搜】二叉树剪枝

文章目录 814. 二叉树剪枝解题思路:深度优先遍历 后序遍历另一种写法 814. 二叉树剪枝 814. 二叉树剪枝 ​ 给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1 。 ​ 返回移除了所有不包含 1 的子树的原二叉树。 ​ 节点…

Codeforces Round 1000 (Div. 2) A-C

链接:Codeforces Round 1000 (Div. 2) A:Minimal Coprime 大意: 给定一个区间,定义最小互质区间是边界互质,边界内无互质区间。求这个区间最小互质区间个数 思路: gcd(l, l 1) gcd(1, l) 1,即相邻数组成的区间互…

基于Redis实现短信验证码登录

目录 1 基于Session实现短信验证码登录 2 配置登录拦截器 3 配置完拦截器还需将自定义拦截器添加到SpringMVC的拦截器列表中 才能生效 4 Session集群共享问题 5 基于Redis实现短信验证码登录 6 Hash 结构与 String 结构类型的比较 7 Redis替代Session需要考虑的问题 8 …

校验收货地址是否超出配送范围实战3(day09)

优化用户下单功能,加入校验逻辑,如果用户的收货地址距离商家门店超出配送范围(配送范围为5公里内),则下单失败。 提示: ​ 1. 基于百度地图开放平台实现(https://lbsyun.baidu.com/&#xff09…

Vue2.0+ElementUI实现查询条件展开和收起功能组件

一、需求 el-form如果查询条件过多,影响页面的展示效果。查询条件表单是我们系统中非常常见的功能,我们需要把它封装成一个通用的组件,方便在系统开发中提升开发效率。除了在实现基本查询条件的功能上,还需要实现多条件的折叠和展…

UE求职Demo开发日志#8 强化前置条件完善,给物品加图标

1 强化前置条件完善 StrengthManager里实现一个Check前置的函数 bool CheckPreAllIsActive(int index),所有的前置都已经激活就返回true,否则返回false 之后在强化的时候加入条件检查: 1.所有前置技能全部激活 2.本身没有强化过 最后测…

pinctrl子系统

目录 一、PinCtrl子系统的定义 二、明确PinCtrl子系统和我们编写驱动的关系 三、pinctrl_desc结构体引入 四、PinCtrl子系统驱动实现分析 1.芯片厂家是如何实现PinCtrl子系统的 2.linux在什么位置设置的引脚复用和电气属性 2.1 really_probe的主要功能 2.2 really_prob…

行政纠错——pycorrector学习

pycorrector是一个开源中文文本纠错工具,它支持对中文文本进行音似、形似和语法错误的纠正。此工具是使用Python3进行开发的,并整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多种模型来实现文本纠错功能。pycorrector官方仓库…

深入MapReduce——计算模型设计

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

React+Cesium基础教程(001):创建基于React的Cesium项目及对Cesium进行基本配置

文章目录 01-基于react的cesium项目创建基于React的Cesium项目Cesium基本配置设置默认启动视角完整项目下载地址01-基于react的cesium项目 创建基于React的Cesium项目 创建react项目: create-react-app react-cesium-basic安装[cesium1.93.0]版本: npm install cesium@1.…

Vue2:使用sortablejs实现el-table中行拖拽调整顺序

如图,实现拖拽表格中的行来调整行顺序,但是其中的编号仍然是1、2、3、4的顺序,不跟着变化。 实现如下: 一、导入sortablejs import Sortable from "sortablejs";export default { components: {Sortable},data() {return {//数据中的id很重要,拖拽行重新排序…

Kingbase数据库体系结构和日常运维监控

1. 数据库架构 1.1. 内存 1.1.1. Share Memory 共享内存是服务器服务器为数据库缓存和事务日志缓存预留的内存缓存空间,其中最重要的组成部分是Shared Buffer和WAL Buffer: 1. Shared Buffer: 减少磁盘IO 2. WAL Buffer: 用…

【Prometheus】Prometheus如何监控Haproxy

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

【0x0012】HCI_Delete_Stored_Link_Key命令详解

目录 一、命令参数 二、命令格式及参数 2.1. HCI_Delete_Stored_Link_Key 命令格式 2.2. BD_ADDR 2.3. Delete_All 三、生成事件及参数 3.1. HCI_Command_Complete事件 3.2. Status 3.3. Num_Keys_Deleted 四、命令执行流程 4.1. 命令发送阶段 4.2. 控制器处理阶段…