??? 操作系統(tǒng)ubuntu 20.04,開(kāi)發(fā)工具Android Studio + Flutter,運(yùn)行平臺(tái)RK3566 Linux。截止現(xiàn)在Flutter官方尚未正式對(duì)Linux arm64進(jìn)行支持,僅有flutter-elinux可用。開(kāi)發(fā)環(huán)境的搭建過(guò)程遇到了很多的坑,幸運(yùn)的是最終完成了。為避免后來(lái)者再次浪費(fèi)時(shí)間,特撰此文以饗讀者。
??? 本文僅記錄編譯環(huán)境的搭建和驗(yàn)證,不涉及具體的應(yīng)用開(kāi)發(fā)。
一、操作系統(tǒng)以及基礎(chǔ)環(huán)境準(zhǔn)備
1、操作系統(tǒng)準(zhǔn)備
? 本文選用ubuntu 20.04。其他版本作者沒(méi)試過(guò),如果你驗(yàn)證某版本可行請(qǐng)留言。
2、準(zhǔn)備基礎(chǔ)環(huán)境
? 安裝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、開(kāi)發(fā)工具準(zhǔn)備與環(huán)境配置
? 下載flutter-elinux,并移動(dòng)到/opt/目錄下
git clone https://github.com/sony/flutter-elinux.git
sudo mv flutter-elinux /opt/
?配置環(huán)境變量,修改 .bashrc 文件,增加export PATH="$PATH:/opt/flutter-elinux/bin",然后執(zhí)行source .bashrc
~$ vi .bashrc
#在文件末尾增加如下內(nèi)容:
export PATH="$PATH:/opt/flutter-elinux/bin"
~$ source .bashrc
? 至此,系統(tǒng)環(huán)境就配置好了。
二、建立并編譯第一個(gè)DEMO程序
1、創(chuàng)建第一個(gè)范例程序
flutter-elinux create demo1
cd demo1
?? 這樣我們就創(chuàng)建了第一個(gè)示例程序demo1并切換到該目錄下,后面的操作均在此目錄下進(jìn)行。
2、配置編譯工具和鏈接庫(kù)
? elinux/CMakeLists.txt打如下補(bǔ)丁
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打上如下補(bǔ)丁
--- 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}")
+
注意補(bǔ)丁前面有一行是刪除操作,不要漏掉了。 ?
創(chuàng)建elinux/flutter_lib目錄,將前面用到的庫(kù)文件都拷貝進(jìn)去。這些庫(kù)文件來(lái)自rk356x_linux源碼(本例如此,根據(jù)你將要運(yùn)行的平臺(tái)確定,同事或者合作伙伴通常會(huì)有源碼)
3、編譯
? 執(zhí)行如下命令進(jìn)行編譯
flutter-elinux build elinux --target-arch=arm64
? 執(zhí)行完畢后會(huì)生成一個(gè)build目錄,需要的文件均在build/elinux/arm64/release/bundle/下,整體拷貝到rk3566板子上就可以啟動(dòng)了。
~/demo1$ ls build/elinux/arm64/release/bundle/
data demo1 lib
參考文獻(xiàn):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-735136.html
arm64平臺(tái)移植flutter,搭建PC端交叉編譯說(shuō)明-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-735136.html
到了這里,關(guān)于基于Linux平臺(tái)交叉編譯 flutter arm64應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!