操作系统ubuntu 20.04,开发工具Android Studio + Flutter,运行平台RK3566 Linux。截止现在Flutter官方尚未正式对Linux arm64进行支持,仅有flutter-elinux可用。开发环境的搭建过程遇到了很多的坑,幸运的是最终完成了。为避免后来者再次浪费时间,特撰此文以飨读者。
本文仅记录编译环境的搭建和验证,不涉及具体的应用开发。
一、操作系统以及基础环境准备
1、操作系统准备
本文选用ubuntu 20.04。其他版本作者没试过,如果你验证某版本可行请留言。
2、准备基础环境
安装unzip curl clang cmake pkg-config以及g++-10-aarch64-linux-gnu
sudo apt install unzip curl clang cmake pkg-config
sudo apt install git
sudo apt-get install g++-10-aarch64-linux-gnu
3、开发工具准备与环境配置
下载flutter-elinux,并移动到/opt/目录下
git clone https://github.com/sony/flutter-elinux.git
sudo mv flutter-elinux /opt/
配置环境变量,修改 .bashrc 文件,增加export PATH="$PATH:/opt/flutter-elinux/bin",然后执行source .bashrc
~$ vi .bashrc
#在文件末尾增加如下内容:
export PATH="$PATH:/opt/flutter-elinux/bin"
~$ source .bashrc
至此,系统环境就配置好了。
二、建立并编译第一个DEMO程序
1、创建第一个范例程序
flutter-elinux create demo1
cd demo1
这样我们就创建了第一个示例程序demo1并切换到该目录下,后面的操作均在此目录下进行。
2、配置编译工具和链接库
elinux/CMakeLists.txt打如下补丁
index 8f2a634..6a2adbe 100644
--- a/elinux/CMakeLists.txt
+++ b/elinux/CMakeLists.txt
@@ -16,6 +16,9 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(TARGET_ARCHITECTURE "arm64")
+set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++-10)
+
elinux/runder/CMakeLists.txt打上如下补丁
--- a/elinux/runner/CMakeLists.txt
+++ b/elinux/runner/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.15)
-project(runner LANGUAGES CXX)
+
if(FLUTTER_TARGET_BACKEND_TYPE MATCHES "gbm")
add_definitions(-DFLUTTER_TARGET_BACKEND_GBM)
@@ -17,7 +17,18 @@ add_executable(${BINARY_NAME}
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
)
apply_standard_settings(${BINARY_NAME})
+
+set(FLUTTER_LIB ${CMAKE_CURRENT_SOURCE_DIR}/../flutter_lib/)
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libffi.so )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libwayland-cursor.so )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libxkbcommon.so.0 )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libmali-wayland.so )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libdrm.so.2 )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libwayland-server.so.0 )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libc.so.6 )
+target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}ld-linux-aarch64.so.1 )
+target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
+
注意补丁前面有一行是删除操作,不要漏掉了。
创建elinux/flutter_lib目录,将前面用到的库文件都拷贝进去。这些库文件来自rk356x_linux源码(本例如此,根据你将要运行的平台确定,同事或者合作伙伴通常会有源码)
3、编译
执行如下命令进行编译
flutter-elinux build elinux --target-arch=arm64
执行完毕后会生成一个build目录,需要的文件均在build/elinux/arm64/release/bundle/下,整体拷贝到rk3566板子上就可以启动了。
~/demo1$ ls build/elinux/arm64/release/bundle/
data demo1 lib
参考文献:文章来源:https://www.toymoban.com/news/detail-735136.html
arm64平台移植flutter,搭建PC端交叉编译说明-CSDN博客文章来源地址https://www.toymoban.com/news/detail-735136.html
到了这里,关于基于Linux平台交叉编译 flutter arm64应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!