Flutter插件budinoh的使用_Flutter自动构建并上传你的项目构建到Firebase

Flutter插件budinoh的使用_Flutter自动构建并上传你的项目构建到Firebase

Budinoh

自动构建并上传你的项目构建到Firebase、PlayStore和AppStore。

特性:

  • ✅ 基于环境文件自动构建项目
  • ✅ 将构建部署到Firebase(命令行/API)
  • ✅ 将构建部署到Google Play商店(API)
  • ✅ 将构建部署到Apple商店(xcrun altool
  • ✅ 支持 --dart-define-from-file 参数

使用yaml配置文件激活插件

激活插件

运行以下命令激活插件:

dart pub global activate budinoh

创建包含构建设置的文件

在项目目录中创建一个名为 budinoh.yaml 的文件:

budinoh:
  <content>

添加构建信息:

builds:
  <name>:
    apk: {} # 可选
    appbundle: {} # 可选
    ipa: # 可选
      export_options: <path/ExportOptions.plist> # 可选

分发

你可以自动将应用程序分发到Firebase、Google Play控制台(google_store)和Apple商店。

firebase_api_credentials:  # 可选。路径或JSON字符串
builds:
  <name>:
    <apk|ios>:
       firebase_cli:
        app_id: <firebase_app_id> # 必需
        groups: # 可选
          - group-one
          - group-two
    <apk|ios>:
       firebase_api:
          credentials: # 可选。路径或JSON字符串。如果缺失,则使用firebase_api_credentials中的凭证
          app_id: <firebase_app_id> # 必需
          groups: # 可选
             - group-one
             - group-two
    appbundle:
      google_store:
        credentials: ./google_service_account.json # 可选。路径或JSON字符串
        package_name: <com.example> # 必需
    ios:
      apple_store:
        api_issuer: <APIISSUER> # 必需
        api_key_id: <APIKEYID> # 必需
        apiKey: '.' # 可选。路径或api key内容

环境变量

是否正在使用环境变量? Budinoh会在你指定的目录中查找名为 ${prefixEnv}${buildKey}${suffixEnv} 的环境文件。

env:
  directory: '.' # 可选。环境目录
  prefix: <.config.> # 可选。环境文件名前缀
  suffix: <.json> # 可选。环境文件名后缀

设置 env: {} 以启用环境变量,默认参数。

启动构建

  1. 运行 dart pub global run budinoh
  2. 查看输出文件 <PROJECT_DIR>/build_output/<ENV_NAME>/<BUILD_FILE>

更多设置

运行 dart pub global run budinoh --help

通过Dart代码使用插件

构建客户端

final client = BuildClient();

// 构建APK
client.buildApk(env: , args: );

// 构建AppBundle
client.buildAppBundle(env: , args: );

// 构建IPA
client.buildIpa(exportOptions: , env: , args: );

分发客户端

final client = DistributionClient();

/// 使用Firebase CLI
client.uploadToFirebaseByCli(buildFile, appId: , releaseNotes: , groups: );
/// 使用Firebase Rest API
client.uploadToFirebaseByApi(buildFile, credentials: , appId: , releaseNotes: , groups: );

/// 使用'xcrun altool --upload-app'命令
client.uploadAppToAppleStore(buildFile, apiIssuer: , apiKeyId: , apiKey: );

/// 使用'https://www.googleapis.com/auth/androidpublisher' Google REST API
client.uploadToGoogleStore(buildFile, credentials: , packageName: );

收集凭证

Firebase

  1. 打开 Google Cloud 控制台并选择你的项目。
  2. 点击创建服务账户并输入服务账户详细信息。
  3. 点击创建并继续。
  4. 添加Firebase App Distribution管理员角色并点击完成。
  5. 创建私有JSON密钥并将密钥移动到可以被构建环境访问的位置。确保将此文件保存在安全的地方,因为它授予了对Firebase项目的App Distribution的管理权限。

更多信息见 此处

Google Play商店

  1. 打开 Google Play Console
  2. 点击账户详情,并注意开发者账户ID。
  3. 点击设置→ API访问。
  4. 点击创建新服务账户按钮。
  5. 跟随弹出窗口中的Google Cloud Platform链接,打开新标签页/窗口:
    • 点击Google Cloud Platform控制台顶部的创建服务账户按钮。
    • 验证你是否在正确的Google Cloud Platform项目中,通过检查第二输入框中的开发者账户ID。如果不是,打开顶部导航栏中的选择器,并找到包含该ID的项目。
    • 提供服务账户名称并点击创建。
    • 点击选择角色,然后找到并选择服务账户用户,然后继续。
    • 点击完成按钮。
    • 点击刚创建的服务账户的动作垂直三点图标。
    • 选择管理密钥。
    • 点击添加密钥 -> 创建新密钥。
    • 确保选择JSON作为密钥类型,然后点击创建。
    • 当提示时保存文件并记住保存位置。

返回Google Play控制台标签页,点击完成关闭对话框。

  • 点击底部的新服务账户的授权。
  • 选择你希望此账户拥有的权限。我们推荐Admin(所有权限),但你也可以手动选择所有复选框并排除一些发布权限,如发布到生产。
  • 点击邀请用户完成操作。

更多信息见 此处 中的“收集Google凭证”。

Apple商店

  1. 用户页面 创建一个新的App Store Connect API Key
    • 对于更多信息,请参阅 App Store Connect中的权限
    • 选择适当的“Keys”选项卡
    • 给你的API Key一个适当的角色。你可以阅读更多关于角色的信息。
    • 记下 发行人ID,因为你在配置步骤中需要它。
  2. 下载新创建的API Key文件(.p8)

注意:下载完成后,此文件无法再次下载。

更多信息见 此处 中的“创建App Store Connect API Key”。

使用环境变量而不是Flavors

基于环境变量构建你的应用。你可以根据使用的环境更改bundle_id或应用名称。 更多信息见 文档

完整示例代码

void main() {
  print('激活Budinoh: dart pub global activate budinoh');
  print('创建Budinoh设置文件!');
  print('运行Budinoh: dart pub global run budinoh');
}

更多关于Flutter插件budinoh的使用_Flutter自动构建并上传你的项目构建到Firebase的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件budinoh的使用_Flutter自动构建并上传你的项目构建到Firebase的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,如果你遇到了一个名为 budinoh 的插件,且其官方文档或介绍中标记为“undefined”或“未知功能”,这通常意味着该插件的具体功能不明确或者文档不完整。不过,我们可以尝试从插件的源代码、示例代码或者社区讨论中推测其功能和使用方法。

由于我无法直接访问外部的插件代码或实时数据,我将提供一个通用的Flutter插件使用模板,并假设 budinoh 插件遵循Flutter插件的标准结构。这可以帮助你开始探索和使用这个插件。

1. 添加依赖

首先,你需要在你的 pubspec.yaml 文件中添加 budinoh 插件的依赖。请注意,这里的版本号和依赖名称是假设的,你需要根据实际情况替换。

dependencies:
  flutter:
    sdk: flutter
  budinoh: ^0.1.0  # 假设的版本号,请根据实际情况替换

2. 导入插件

在你的 Dart 文件中导入该插件。

import 'package:budinoh/budinoh.dart';

3. 初始化和使用

由于我们不知道 budinoh 插件的具体功能,下面是一个假设的使用案例,其中我们尝试调用一个假想的 unknownFunction 方法。

import 'package:flutter/material.dart';
import 'package:budinoh/budinoh.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Budinoh Plugin Example'),
        ),
        body: Center(
          child: BudinohExample(),
        ),
      ),
    );
  }
}

class BudinohExample extends StatefulWidget {
  @override
  _BudinohExampleState createState() => _BudinohExampleState();
}

class _BudinohExampleState extends State<BudinohExample> {
  String result = 'Unknown';

  @override
  void initState() {
    super.initState();
    // 假设budinoh有一个名为unknownFunction的异步方法
    _callUnknownFunction();
  }

  Future<void> _callUnknownFunction() async {
    try {
      // 调用假想的unknownFunction方法,并处理结果
      var response = await Budinoh.unknownFunction();
      setState(() {
        result = response.toString();  // 假设返回的是一个可以被toString()的对象
      });
    } catch (e) {
      setState(() {
        result = 'Error: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Result from Budinoh:'),
        Text(result),
      ],
    );
  }
}

注意事项

  1. 文档和示例:尽可能查找 budinoh 插件的官方文档、示例代码或GitHub仓库,以获取更准确的使用方法和功能描述。
  2. 错误处理:在实际使用中,务必添加适当的错误处理逻辑,以处理可能的异常和错误。
  3. 社区资源:利用Stack Overflow、GitHub Issues等社区资源,查找其他开发者可能遇到的问题和解决方案。

由于我们不知道 budinoh 插件的具体实现和API,上述代码只是一个基于假设的示例。在实际使用中,请务必参考插件的官方文档和示例代码。

回到顶部