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

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

Flutter Debian

flutter_to_debian_logo

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

flutter_to_debian_banner

我们的 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 目录,则名为 preinstpostinstprermpostrm 的可执行文件将被复制到包中作为 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

1 回复

更多关于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
    
  • androidios目录中删除不必要的文件,专注于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软件包,可以通过调用dpkgapt-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);
}
回到顶部