flutter常见问题
Easul Lv6

flutter相关问题

安装后flutter -h不动

折叠代码块BASH 复制代码
1
2
3
4
5
# 这是他在访问github进行fetch,所以会卡住
# 可以挂一下代理
export ALLL_PROXY=socks5://127.0.0.1:1080
# 查看版本的时候可以添加啰嗦模式
flutter -h --verbose

运行flutter doctor提示错误

折叠代码块BASH 复制代码
1
2
3
# 提示少的库就装一下
# 没有platform就下载
sdkmanager "build-tools;28.0.3" "platforms;android-29"

linux相关问题

appimage-builder打包单文件

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
# 创建 AppDir 用于打包组件的存放
mkdir -p build/linux_temp/AppDir
cd build/linux_temp/
# 复制 build 后的组件 AppDir
cp -r build/linux/x64/release/bundle/* build/linux_temp/AppDir
# 生成打包配置,具体配置看下边
appimage-builder.appimage --generate
# 使用配置文件打包app,并跳过测试
# 否则会用docker拉取镜像进行测试
appimage-builder.appimage --recipe AppImageBuilder.yml --skip-tests
# 打包后的单文件在build/linux_temp/

具体配置如下
app打包好后,并在运行之前,可能需要一些环境变量,可在runtimeenv设置

折叠代码块YML 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# appimage-builder recipe see https://appimage-builder.readthedocs.io/en/latest/reference/recipe.html for details
version: 1
AppDir:
path: /absolute/path/build/linux_temp/AppDir
app_info:
id: ml.lightly.radio
name: radio
icon: application-vnd.appimage
version: latest
exec: radio
exec_args: $@
apt:
arch:
- amd64
allow_unauthenticated: true
sources:
- sourceline: deb https://community-packages.deepin.com/deepin/ apricot main contrib
non-free
- sourceline: deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian
buster stable
- sourceline: deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable
main
- sourceline: deb [arch=amd64,arm64,armhf] http://packages.microsoft.com/repos/code
stable main
- sourceline: deb https://com-store-packages.uniontech.com/appstore deepin appstore
- sourceline: deb https://community-packages.deepin.com/printer eagle non-free
- sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/edge/ stable
main
include:
- libc6:amd64
files:
include: []
exclude:
- usr/share/man
- usr/share/doc/*/README.*
- usr/share/doc/*/changelog.*
- usr/share/doc/*/NEWS.*
- usr/share/doc/*/TODO.*
runtime:
env:
GSETTINGS_SCHEMA_DIR: '/usr/share/glib-2.0/schemas/'
test:
fedora-30:
image: appimagecrafters/tests-env:fedora-30
command: ./AppRun
debian-stable:
image: appimagecrafters/tests-env:debian-stable
command: ./AppRun
archlinux-latest:
image: appimagecrafters/tests-env:archlinux-latest
command: ./AppRun
centos-7:
image: appimagecrafters/tests-env:centos-7
command: ./AppRun
ubuntu-xenial:
image: appimagecrafters/tests-env:ubuntu-xenial
command: ./AppRun
AppImage:
arch: x86_64
update-information: guess

flutter编译AppImage
AppImage菜单配置

windows相关问题

缺少Nuget

下载Nuget
然后在flutter项目全局搜索Nuget.exe not found,然后进行如下修改

折叠代码块BASH 复制代码
1
2
3
4
5
6
# 找到这两行
FetchContent_MakeAvailable(nuget)
set(NUGET ${nuget_SOURCE_DIR}/nuget.exe)
# 修改为下边两行的样子。 C:/Software/nuget/nuget.exe 为nuget的绝对路径
# FetchContent_MakeAvailable(nuget)
set(NUGET C:/Software/nuget/nuget.exe)

Inno Setup Compiler打包程序

好处

  • 用于打包可安装文件,也就是需要安装时解压的软件
  • 打包后可安装测试缺少什么dll

使用流程

  • 所需库文件复制到build/windows/runner/Release
  • File ->New ->Next
  • 填写应用信息,Next
  • 填写应用文件夹名,Next
  • 选取flutter编译后的可执行文件路径(build/windows/runner/Release/xx.exe
  • 添加文件,选flutter编译后的dll库(build/windows/runner/Release/xx.dll
  • 添加文件夹,选flutter的数据文件夹(build/windows/runner/Release/data)。然后Next
    • 添加文件夹时,无法包括文件夹本身的目录
    • 可以在data文件夹同级目录创建一个temp_data文件夹
    • data文件夹复制到temp_data,然后选temp_data
  • 修改应用文件类型名与扩展名,Next到自定义设置
  • 修改打包后exe输出文件夹,编译输出基本文件名,icon图标,Next到Finish
  • 然后打包即可,脚本可以不用保存

Enigma Virtual Box打包程序

好处

  • 用于打包可单独执行文件

坏处

  • 可能报毒

使用流程

  • 所需库文件复制到build/windows/runner/Release
  • 选择flutter编译后的可执行文件路径(build/windows/runner/Release/xx.exe
  • 增加文件,选flutter编译后的dll库(build/windows/runner/Release/xx.dll
  • 创建虚拟文件夹data
  • 增加flutter的数据文件夹(build/windows/runner/Release/data
  • 文件选项点击压缩文件
  • 执行封包。封包程序在build/windows/runner/Release/xx_box.exe

所需库文件

由于不同电脑上可能不一定有需要的运行库,所以这里列一些常用的缺失运行库
可以按需使用

修改图标

windows/runner/resources下,必须为ico图标,最好用windows的画图保存成ico格式

macos相关问题

构建后没有网络 Unhandled Exception: Connection failed

需要申请相关网络权限
macos/Runner/DebugProfile.entitlementsmacos/Runner/Release.entitlements添加如下权限

折叠代码块XML 复制代码
1
2
<key>com.apple.security.network.client</key>
<true/>

参考

播放http(非https)链接时报错

因为http不安全,所以需要相关权限
macos/Runner/Info.plist添加如下权限

折叠代码块XML 复制代码
1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

参考

电脑构建缓慢

macos构建也可以使用github action自动构建,会快很多

修改图标

macos/Runner/Assets.xcassets/AppIcon.appiconset替换图标,不能直接改名,图标需要保存成指定的像素值

android相关问题

命令行配置AndroidSDK

参考

gradle构建不动

折叠代码块BASH 复制代码
1
2
3
4
# 可能可gradle的仓库有关系
# 在gradle.properties添加代理即可
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080

MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)

可以卸载手机软件后重装

vscode remote adb连接手机

也就是服务器开发android,远程连接手机测试

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
# 本地启动adb服务器
adb start-server
# 在remote的SSH Config里添加这一项
# 用于将本地的5037映射到服务器里
RemoteForward 5037 localhost:5037
# 服务器端搜索设备
adb devices
# 如果本地想要无线链接,那么在本地先执行一下如下操作,服务端既可以找到设备
# 这里参考了 android使用无线网调试手机
adb -s ZTEC880A tcpip 10025
adb connect 192.168.2.123:10025

android使用无线网调试手机

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
# 先用数据线链接手机,打开调试,查看设备是否连接上
adb devices
# 找到要无线调试的设备名称,以下用 ZTEC880A 代表你所选的设备名称,然后设置无线连接
# 后边的端口随便写
adb -s ZTEC880A tcpip 10025
# 找到手机的ip,如192.168.1.10025,然后下边连接
adb connect 192.168.2.123:10025
# 使用adb安装app
adb install build/app/outputs/flutter-apk/app-release.apk
# 覆盖安装
adb install -r build/app/outputs/flutter-apk/app-release.apk
# 取消连接
adb disconnect 192.168.2.123:10025

链接

编译打包老是出错

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
# 可以安装一下旧版本的build-tools,用于适应老版本手机
# 相关解释如下
# 1. Android版本:build-tools;28.0.3适用于Android 9.0(API级别28)及以下版本,
# 而build-tools;30.0.3适用于Android 11(API级别30)及以上版本。
# 2. 支持的构建工具:build-tools;28.0.3支持旧版的构建工具,例如Ant和Eclipse ADT插件
# 而build-tools;30.0.3不再支持这些旧版工具。
# 3. 支持的构建任务:build-tools;30.0.3提供了一些新的构建任务和工具
# 例如apkanalyzer和apksigner,用于分析和签名APK文件
# 这些工具在build-tools;28.0.3中不可用。
# 4. 支持的Java版本:build-tools;30.0.3需要使用Java 8或更高版本
# 而build-tools;28.0.3可以使用Java 7或更高版本。
sdkmanager --install "build-tools;28.0.3"
 评论
Powered By Valine
v1.5.2