Flutter多渠道打包插件walle_kit的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter多渠道打包插件walle_kit的使用

1. 简介

walle_kit 是一个用于Flutter项目的多渠道打包工具,基于美团的Walle库。它可以帮助开发者轻松地为不同的应用分发渠道生成带有渠道标识的APK文件。本文将详细介绍如何在Flutter项目中使用 walle_kit 进行多渠道打包,并提供一个完整的示例Demo。

2. 安装与配置

2.1 添加依赖

pubspec.yaml 文件中添加 walle_kit 依赖:

dependencies:
  walle_kit: ^latest_version  # 请替换为最新版本号

或者使用Git仓库中的快照版本:

dependencies:
  walle_kit:
    git:
      url: https://github.com/rxreader/walle_kit.git
2.2 配置 Android 项目

android/app/build.gradle 文件中应用 walle_kit 的 Gradle脚本。根据需求选择是否使用 flavors(产品变种)和是否支持360加固。

2.2.1 不使用 flavors

如果你不需要使用 flavors,可以直接在 build.gradle 中配置 walle_kit_v2.gradlewalle_kit.gradle。推荐使用 walle_kit_v2.gradle,因为它不依赖 CLI 方式,且不支持360加固。

// android/app/build.gradle
apply from: "${project(':walle_kit').projectDir}/walle_kit_v2.gradle"  // 推荐

walle {
    enabled = true

    tencent {
        secretId = 'your_secret_id'  // 腾讯云访问管理SecretId
        secretKey = 'your_secret_key'  // 腾讯云访问管理SecretKey
        channels = ['tencent', 'tencent-alias']  // 渠道列表
    }

    outputDir = file("${project.buildDir}/outputs/apk/walle")  // 输出目录
    fileNameFormat = '${appName}-${buildType}-${channelId}.apk'  // 文件命名格式
    channelFile = file('channel')  // 渠道配置文件路径
}
2.2.2 使用 flavors

如果你需要使用 flavors,可以在 build.gradle 中为每个 flavor 配置 walle_kit

// android/app/build.gradle
android {
    productFlavors {
        prod {  // 定义一个名为prod的flavor
        }
    }

    walleConfigs {
        prod {  // 为prod flavor配置walle_kit
            enabled = true

            tencent {
                secretId = 'your_secret_id'  // 腾讯云访问管理SecretId
                secretKey = 'your_secret_key'  // 腾讯云访问管理SecretKey
                channels = ['tencent', 'tencent-alias']  // 渠道列表
            }

            outputDir = file("${project.buildDir}/outputs/apk/walle")  // 输出目录
            fileNameFormat = '${appName}-${buildType}-${channelId}.apk'  // 文件命名格式
            channelFile = file('channel')  // 渠道配置文件路径
        }
    }
}

walle {
    enabled = false  // 禁用默认配置
}

3. 渠道配置文件

walle_kit 支持通过 channel 文件或 channel.json 文件来定义渠道信息。你可以根据自己的需求选择合适的格式。

  • channel 文件:每行一个渠道ID,适用于简单的渠道配置。
# channel
tencent
tencent-alias
qihu360
qihu360-alias
  • channel.json 文件:支持更复杂的渠道配置,例如可以为每个渠道指定额外的参数。
{
  "channels": [
    {
      "id": "tencent",
      "extra": {
        "param1": "value1"
      }
    },
    {
      "id": "tencent-alias",
      "extra": {
        "param2": "value2"
      }
    }
  ]
}

4. 打包命令

完成上述配置后,你可以使用以下命令进行多渠道打包:

flutter build apk --release

walle_kit 会自动根据配置生成多个带有不同渠道标识的APK文件,并将它们保存到指定的输出目录中。

5. 示例代码

下面是一个完整的Flutter Demo,展示了如何在应用中获取并显示当前的渠道ID。

import 'dart:async';

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

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  const MyApp({
    super.key,
  });

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _channelId = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    _initChannelId();
  }

  Future<void> _initChannelId() async {
    // 获取渠道ID
    final String? channelId = await Walle.instance.getChannelId();

    if (!mounted) {
      return;
    }

    // 更新UI
    setState(() {
      _channelId = channelId ?? 'unknown';
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('walle_kit 示例'),
        ),
        body: Center(
          child: Text('当前渠道ID: $_channelId\n'),
        ),
      ),
    );
  }
}

更多关于Flutter多渠道打包插件walle_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter多渠道打包插件walle_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用walle_kit插件进行多渠道打包的详细步骤和代码案例。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加walle_kit的依赖:

dependencies:
  flutter:
    sdk: flutter
  walle_kit: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 配置Android项目

2.1. 在android/app/build.gradle文件中配置签名

确保你已经配置了签名信息,walle_kit需要签名来生成渠道包。

android {
    ...
    signingConfigs {
        release {
            // 配置你的签名信息
            keyAlias 'your_key_alias'
            keyPassword 'your_key_password'
            storeFile file('your_keystore_path')
            storePassword 'your_store_password'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

2.2. 配置walle插件

android/app/build.gradle文件中添加walle插件的配置:

apply plugin: 'com.android.application'
apply plugin: 'me.walle.plugin'

android {
    ...
}

walle {
    // 渠道包输出目录
    apkOutputFolder = new File("${project.buildDir}/outputs/apk/channels/")

    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel.txt")
}

3. 创建渠道配置文件

在项目的根目录下创建一个名为channel.txt的文件,并在其中列出你想要生成的渠道。例如:

googleplay
huawei
xiaomi
360

4. 使用命令行生成渠道包

配置完成后,你可以使用命令行工具来生成渠道包。首先,确保你已经在命令行中定位到了Flutter项目的根目录。

运行以下命令来生成所有渠道包:

./gradlew assembleReleaseChannels

这个命令会读取channel.txt文件中的渠道列表,并为每个渠道生成一个APK文件,输出到build/outputs/apk/channels/目录下。

5. 在Flutter代码中使用walle_kit获取渠道信息

虽然walle_kit主要用于Android多渠道打包,但你仍然可以在Flutter代码中获取当前安装的APK的渠道信息。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Channel Info'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: WalleKit.getChannel(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  return Text('Channel: ${snapshot.data ?? 'Unknown'}');
                }
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ),
      ),
    );
  }
}

在上面的代码中,WalleKit.getChannel()会异步返回当前APK的渠道信息。如果APK是通过walle_kit生成的渠道包,它将返回相应的渠道名称;否则,它将返回null'Unknown'

通过以上步骤,你就可以在Flutter项目中使用walle_kit插件进行多渠道打包,并在Flutter代码中获取渠道信息了。

回到顶部