基于Linux平台交叉编译 flutter arm64应用

    操作系统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

参考文献:

arm64平台移植flutter,搭建PC端交叉编译说明-CSDN博客

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值