Flutter Debian相关功能插件debian的探索与使用
Flutter Debian 相关功能插件 debian 的探索与使用
Flutter Debian

一个简单的命令行应用程序,帮助你轻松地将 Flutter 应用程序构建为一个可生产的 Debian 包。

我们的 Debian 打包概述 📦
该插件是一个工具,根据 debian.yaml
文件中的指令构建 Debian 包。要基本了解其核心概念,请参阅 Debian 文档。本页面底部列出了其他链接和信息。
Flutter debian.yaml 示例
将 YMAL 文件放在你的 Flutter 项目下的 <project root>/debian/debian.yaml
。注意:YMAL 文件对空格敏感!例如:
flutter_app:
command: mega_cool_app
arch: x64
parent: /usr/local/lib
nonInteractive: false
control:
Package: mega-cool-app
Version: 1.0.0
Architecture: amd64
Priority: optional
Depends:
Maintainer:
Description: Mega Cool App that does everything!
#options:
# exec_out_dir: debian/packages
以下部分解释了 YAML 文件的各个部分。
Flutter app
此部分的 debain.yaml
文件定义了将要打包到 Debian 中的应用程序。
flutter_app:
command: mega_cool_app
arch: x64
parent: /usr/local/lib
nonInteractive: false
Command
指向你项目 Linux 发行版捆绑文件中的二进制文件,并在调用 Debian 包时运行。
arch
你的应用的构建架构。
execFieldCodes
Exec
键在桌面文件中的字段代码列表,以逗号分隔。
示例: execFieldCodes: f,u,i
支持的代码: f, F, u, U, i, c, k
更多信息请参见 FreeDesktop 规范。
parent
应用将安装在这个目录下的子目录(如 mega_cool_app)中。
nonInteractive
当为真时,在包安装过程中不显示确认提示。
默认: /opt
示例:
parent: /usr/local/lib
目标目录为: /usr/local/lib/mega_cool_app
包维护者脚本
如果存在 debian/scripts
目录,则名为 preinst
、postinst
、prerm
和 postrm
的可执行文件将被复制到包中作为 Debian 包维护者脚本。
请注意,任何 preinst
脚本都会覆盖由该工具生成的默认脚本,从而禁用安装前的交互式确认提示(就像 nonInteractive: true
一样被使用)。
额外文件
如果存在 debian/skeleton
目录,这些文件将被复制到包中。
这可以用于默认配置文件。
示例:
debian/skeleton/etc/megacool/main.conf 将安装为 /etc/megacool/main.conf
Control
这是描述给 apt 包管理器或任何你用来安装应用的软件,它是什么内容。
Depends
列出你的项目所依赖的库,它们将在你的应用安装到系统上之前由 apt 包管理器安装。 例如:
pub.dev 包 https://pub.dev/packages/flutter_secure_storage 的 Linux 版本依赖于 libsecret-1-0 和 libjsoncpp1
NB: 多个 Depends 之间用 " , " 分隔。
桌面文件和图标 🖥️
桌面条目文件用于向桌面菜单添加应用程序。这些文件指定你的应用的名称和图标,所属类别,相关搜索关键词等。这些文件扩展名为 .desktop 并遵循 XDG 桌面条目规范。
Flutter mega-cool-app.desktop 示例
将 .desktop 文件放在你的 Flutter 项目下 <project root>/debian/gui/mega-cool-app.desktop
。
注意: 图标和 .desktop 文件名必须与 yaml 文件中的应用名相同!
例如:
[Desktop Entry]
Version=1.0
Name=Mega Cool App
GenericName=Mega Cool App
Comment=A Mega Cool App that does everything
Terminal=false
Type=Application
Categories=Utility
Keywords=Flutter;share;files;
将带有 .png 扩展名的图标放在你的 Flutter 项目下 <project root>/debian/gui/mega-cool-app.png
。
构建 Debian 包 📦
一旦 gui/ 文件夹和 debian.yaml 文件完成。从项目的根目录运行 flutter_to_debian
如下所示。
首先构建你的项目
$ flutter build linux
如果没有安装 flutter_to_debian
,请先安装。
$ dart pub global activate flutter_to_debian
然后运行 flutter_to_debian
。
$ flutter_to_debian
查找并安装你的 .deb 应用程序包 📦
从项目的根目录开始查找。
$ cd debian/packages && ls
安装
$ sudo dpkg -i [package_name].deb
依赖查找
命令 flutter_to_debian
可以用于查找一组库文件的依赖关系。
运行 flutter_to_debian help
查看此描述:
Usage: flutter_to_debian [<mode> [<options>] ]
<mode>:
help
打印此用法。
create
创建 Debian 包所需的文件夹和模板文件。
build
构建 Debian 包文件 *.deb。这是默认模式。
dependencies [<opts>] [<file1> [ <file2>...]]
检测一组库文件的依赖关系。
<fileX> 可以是文件或目录。
<opts>:
--excluded-packages=<comma-separated-list-of-names>
这些包将从检测中排除。
--excluded-libraries=<pattern>
排除这些库文件的检测。 <pattern> 是一个正则表达式。
示例:
flutter_to_debian
使用 ./debian/debian.yaml 中的描述创建 Debian 包。
flutter_to_debian dependencies
检测 ./build/linux/x64/release/bundle/lib 中的文件的依赖关系
并使用 debian/debian.yaml 中的信息。
flutter_to_debian dependencies --excl-lib=-dev|^my_lib release/libs
检测 release/libs 中的文件的依赖关系而不排除
指定的 "-dev|^my_lib":
文件 release/libs/our_lib-dev.2.so 和 release/libs/my_lib-dev.2.so
将被排除检测。
flutter_to_debian dependencies --excluded-packages=lintian,my-project prod/libs
检测 prod/libs 中的文件的依赖关系
包 lintian 和 my-project 将被排除处理。
注意: 模式和选项可以缩写: --ex-pack 意味着 --excluded-packages
更多关于Flutter Debian相关功能插件debian的探索与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Debian相关功能插件debian的探索与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你需要与Debian系统进行交互或使用Debian相关的功能,可以通过编写或使用现有的Flutter插件来实现。以下是一些与Debian相关的功能探索与使用的思路:
1. 使用flutter_linux
插件
- Flutter官方支持Linux平台,因此你可以使用
flutter_linux
插件来开发适用于Debian的应用程序。 - 该插件允许你访问Linux系统的原生功能,如文件系统、网络、进程管理等。
示例代码:
import 'package:flutter_linux/flutter_linux.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Debian Demo')),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 调用Linux系统命令
String result = await FlutterLinux.executeCommand('ls -l');
print(result);
},
child: Text('Run Command'),
),
),
),
);
}
}
2. 使用process_run
插件
process_run
是一个Flutter插件,用于执行系统命令。你可以通过它调用Debian系统的命令行工具。- 例如,运行
apt-get
命令、管理服务、查看系统信息等。
安装:
dependencies:
process_run: ^0.12.0
示例代码:
import 'package:process_run/process_run.dart';
void main() async {
// 运行系统命令
Shell shell = Shell();
var result = await shell.run('apt-get update');
print(result.outText);
}
3. 自定义与Debian系统交互的插件
如果现有插件无法满足需求,你可以编写自定义的Flutter插件来访问Debian系统的特定功能。
步骤:
- 创建Flutter插件:
flutter create --template=plugin my_debian_plugin
- 在
android
和ios
目录中删除不必要的文件,专注于Linux实现。 - 在
linux
目录中编写C/C++代码,与Debian系统交互。 - 使用
MethodChannel
在Flutter和原生代码之间通信。
示例代码:
-
Flutter端:
import 'package:flutter/services.dart'; class MyDebianPlugin { static const MethodChannel _channel = MethodChannel('my_debian_plugin'); static Future<String?> getPlatformVersion() async { return await _channel.invokeMethod('getPlatformVersion'); } }
-
Linux端(
my_debian_plugin.cc
):#include <flutter_linux/flutter_linux.h> #include <sys/utsname.h> static void my_debian_plugin_get_platform_version(FlMethodChannel* channel, FlMethodCall* method_call, gpointer user_data) { struct utsname uname_data = {}; uname(&uname_data); g_autofree gchar *version = g_strdup_printf("Linux %s", uname_data.version); g_autoptr(FlValue) result = fl_value_new_string(version); fl_method_call_respond_success(method_call, result, nullptr); } void my_debian_plugin_register_with_registrar(FlPluginRegistrar* registrar) { FlMethodChannel* channel = fl_method_channel_new(fl_plugin_registrar_get_messenger(registrar), "my_debian_plugin", FL_METHOD_CODEC(codec)); fl_method_channel_set_method_call_handler(channel, my_debian_plugin_get_platform_version, nullptr, nullptr); }
4. 使用system_info
插件
system_info
插件可以获取系统信息,如操作系统名称、版本、架构等。- 这对于检测当前系统是否为Debian非常有用。
安装:
dependencies:
system_info: ^2.0.0
示例代码:
import 'package:system_info/system_info.dart';
void main() {
String osName = SysInfo.operatingSystemName;
String osVersion = SysInfo.operatingSystemVersion;
print('OS: $osName, Version: $osVersion');
}
5. 与Debian包管理器交互
如果你需要在Flutter应用中管理Debian软件包,可以通过调用dpkg
或apt-get
命令来实现。
示例代码:
import 'package:process_run/process_run.dart';
void main() async {
Shell shell = Shell();
// 安装软件包
var result = await shell.run('sudo apt-get install -y package_name');
print(result.outText);
// 卸载软件包
result = await shell.run('sudo apt-get remove -y package_name');
print(result.outText);
}