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.pswp.cn/web/66905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66905.shtml
英文地址,請注明出處:http://en.pswp.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,…