Как элегантно реализовать многоканальную упаковку во Flutter (серия статистики скрытых точек)

Flutter
Как элегантно реализовать многоканальную упаковку во Flutter (серия статистики скрытых точек)

🔥🔥🔥 Последняя версия для Flutter 2.2

Я Зеро, не много ерунды, карта мозга будет представлена ​​первой

  • Сначала лайк, потом смотри, обновляй навсегда 👏

image.png

Пока вы уделяете внимание Flutter, вам обязательно понадобится эта статья, ==>强烈建议➕收藏

Введение в многоканальную упаковку

Основной функцией многоканальной упаковки является удовлетворение операционных потребностей продуктов, а также учет каналов и эффектов активности.
Родной до(Android、iOS) Приложение для разработки Существуют различные инструменты, помогающие нам в многоканальной упаковке.
В нашем процессе разработки мы также должны нести ответственность за функцию канала. Собственные инструменты разработки в основном удовлетворяют содержимому нашего пакета канала отладки, но нам нужно больше настроек, чтобы завершить его на Flutter. Ниже будет представлен один за другим из конфигурации => отладка => Полный процесс и детали упаковки.

Многоканальная конфигурация

отFlutter v1.17В начале в командный инструмент Flutter добавлена ​​функция пользовательских параметров--dart-define, мы можем использовать этот параметр команды для установки параметров при упаковке или запуске приложения.

Сначала убедитесьFlutterверсия, моя версияv1.22.6

flutter run --dart-define=APP_CHANNEL=ZeroFlutter

Конечно, вы можете передать несколько наборов параметров

flutter run --dart-define=APP_CHANNEL=ZeroFlutter --dart-define=OTHER_VAR=Dart

В коде Dart вам нужно написать так:一定是和命令参数是对应的

// main.dart
class EnvironmentConfig {
  static const APP_CHANNEL = String.fromEnvironment('APP_CHANNEL');
  static const OTHER_VAR = String.fromEnvironment('OTHER_VAR');
}

Беги, чтобы увидеть результаты

  • Сначала изменитьFlutterКод, соответствующий проекту
// my_home_page.dart
Text(
  'App 渠道:${EnvironmentConfig.APP_CHANNEL}',
  style: Theme.of(context).textTheme.bodyText1,
),
Text(
  '其他参数:${EnvironmentConfig.OTHER_VAR}',
  style: Theme.of(context).textTheme.bodyText1,
),
  • затем запустите проект
flutter run --dart-define=APP_CHANNEL=ZeroFlutter --dart-define=OTHER_VAR=Dart
  • Посмотреть Результаты

image.png
Здесь вы можете видеть, что соответствующее содержимое параметра было отображено.Далее вопрос о том, как использовать конкретный бизнес-уровень.В следующем содержании также будут представлены сценарии использования, продолжайте читать👇👇

Многоканальная отладка

Сначала мы видели эффект, но в процессе разработки мы не всегда можем запустить командную строку, чтобы увидеть эффект.IDEБыло бы здорово вести многоканальную отладку и разработку, представим их отдельно.VS Codeа такжеAndroid Studioспособ конфигурации.

Vs Конфигурация кода

  • сначала создайтеlaunch.jsonфайл запуска

Kapture 2021-04-08 at 21.51.39.gif

  • Затем настройте пункт параметров запуска
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flutter",
            "request": "launch",
            "type": "dart",
	          // 这里是新加的命令参数
            "args": [
                "--dart-define",
                "APP_CHANNEL=Flutter",
                "--dart-define",
                "OTHER_VAR=Dart"
            ]
        },
	      // 这里是配置多个渠道
        {
            "name": "Mi",
            "request": "launch",
            "type": "dart",
            "args": [
                "--dart-define",
                "APP_CHANNEL=Mi",
                "--dart-define",
                "OTHER_VAR=安卓之光"
            ]
        }
    ]
}

Затем здесь появляется настроенная информация о канале, переключаем отдельноFlutterа такжеMiБеги, чтобы увидеть эффект
image.png
image.pngimage.png

Конфигурация Android-студии

  • Сначала настройте параметры команды

img_06.gif

  • Добавить кMiПараметры конфигурации канала

Скопируйте его первымFlutterконфигурации, а затем измените имя наMi, и измените конфигурацию параметра команды какMiа также安卓之光
image.png
На этом настройка Android Studio в основном завершена. Давайте переключимся и запустим, чтобы увидеть эффект.
img_08.png
img_04.pngimg_05.png
Настройка IDE завершена здесь [Подробный конфигурационный файл можно получить на GitHub в проекте]. После стольких разговоров, почему вы не говорите об упаковке? Не волнуйтесь, мне нужно настроить сложное оборудование для вас.Мы будем следить позже.Упаковка-это вопрос порядка.

Настройка собственных сценариев упаковки

🔥🔥🔥 Последняя версия для Flutter 2.2

Android

  • ИзменятьGradleнастроить

Обычно многоканальность Android даетAndroidManifest.xmlНапиши<meta-data/>, Если мы хотим сохранить исходный исходный статистический метод без изменений, то сначала нам нужно получить параметры команды канала (--dart-define=APP_CHANNEL=ZeroFlutter --dart-define=OTHER_VAR=Dart), вам нужно изменитьGradleнастроить

// android/app/build.gradle
/// 获取渠道参数使用,这里设置一下默认值
def dartEnvironmentVariables = [
    APP_CHANNEL: 'main',
    OTHER_VAR: 'other',
]

if (project.hasProperty('dart-defines')) {
    dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
        .split(',')
        .collectEntries { entry ->
            // 1.22.6 版本
            //def pair = URLDecoder.decode(entry).split('=')
            // 2.2 版本
            def pair = new String(entry.decodeBase64(), 'UTF-8').split('=')
            [(pair.first()): pair.last()]
        }
}
  • Как использовать (переименовать apk)
// android/app/build.gradle
android{
    // 重命名 apk
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            if(variant.buildType.name == "release"){
                // 获取版本
                def versionName = variant.versionName
                def versionCode = variant.versionName
             	// 设置新名称
                def newApkName ="app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_channel_${dartEnvironmentVariables.APP_CHANNEL}.apk"
                outputFileName = new File(newApkName)
            }
        }
    }
}
  • выполнить упаковку
flutter build apk --dart-define=APP_CHANNEL=ZeroFlutter --dart-define=OTHER_VAR=Dart
// 打包后 apk 的输出路径
✓ Built build/app/outputs/flutter-apk/app-release.apk (15.4MB).
// 打开打包后的 apk
open build/app/outputs/apk/release/

img_09.png
Видно здесь после переименования пакета APKapp_v1.0.0_1_channel_ZeroFlutter.apk, чтобы мы могли различать приложения и публиковать их в разных магазинах приложений.

iOS

Здесь сначала необходимо выполнить упаковку iOS.buildкоманда, а затем идтиXcodeзагрузка пакета

flutter build ios --dart-define=APP_CHANNEL=ZeroFlutter --dart-define=OTHER_VAR=Dart

Оптимизация скрипта упаковки

В этот момент, если мы выполнимMiКоманда упаковки канала, вы найдете ранее упакованныйapp_v1.0.0_1_channel_ZeroFlutter.apkИсчез, потому что он был очищен, поэтому мы перемещали apk в папку пакета канала после каждого упакованного, а затем продолжали выполнять упаковку следующего канала.

flutter build apk --dart-define=APP_CHANNEL=Mi --dart-define=OTHER_VAR=安卓之光

Оптимизированный скрипт выглядит следующим образом:

  • Скрипт упаковки канала
# fapk_channel.sh
flutter build apk --dart-define=APP_CHANNEL=$1 --dart-define=OTHER_VAR=$2
cd build/app/outputs/apk/release/
cp -R *.apk /Users/zero/apk/$1/
cd /Users/zero/apk/$1/
open .
  • Массовая упаковка
fapk_channel.sh ZeroFlutter Dart
fapk_channel.sh Mi 安卓之光

img_10.gif
Таким образом, упаковка может быть завершена автоматически.После запуска скрипта вы можете пойти выпить чашечку кофе, и кофе также будет упакован.
После того, как пакет будет готов, мы можем отдельно протестировать пакет канала и загрузить его в соответствующий магазин приложений.

сцены, которые будут использоваться

Статистика

Что касается работы, необходимо учитывать загрузку, установку, использование, ежедневную активность, еженедельную активность, ежемесячную активность, эффект активности и т. д. для каждого магазина приложений (канала), поэтому очень важно различать по каналам .распределение каналов.
img_11.png
На стороне разработки нам нужно различать ненормальные состояния каждого канала, и соответствующие файлы символов во время упаковки также различаются.Например, Bugly можно настроить таким образом, чтобы завершить настройку файлов символов разных каналов.

// android/app/build.gradle
bugly {
    appId = 'ZeroFlutter'
    appKey = 'GitHub:https://github.com/yy1300326388'
    // 这里配置渠道参数即可
    appChannel = "${dartEnvironmentVariables.APP_CHANNEL}"
}

img_12.pngВ другом примере, если нам нужно установить информацию о канале Umeng, мы можем напрямую вызвать настройки API через код Dart.

/// 初始化友盟,直接将 EnvironmentConfig.APP_CHANNEL 传入渠道参数
UmengSdk.initCommon(kUmengAndroidAppkey, kUmengIosAppkey, EnvironmentConfig.APP_CHANNEL);

Затем вы можете видеть статистические данные в фоновом режиме, что нам удобно для дальнейшей работы и развития.
img_13.png

распределение каналов

Требования каждого магазина приложений различаются. Некоторая конфигурация копирайтинга карточек, некоторая информация об авторских правах карточек и использование некоторых разрешений карточек могут обрабатываться по-разному для разных каналов. Мы можем добавить суждение для обработки разных логик.mixin

EnvironmentConfig.APP_CHANNEL == 'Mi'
? Text(
  "小米渠道显示",
  style: Theme.of(context).textTheme.bodyText1,
)
: SizedBox()

Здесь мы работаем отдельноZeroFlutterа такжеMiканал, чтобы увидеть эффект
image.pngimg_01.png

Суммировать

На этом статья подходит к концу. В основном мы говорили об использовании и настройке параметров команды, а также о навыках настройки IDE и отладки пакета каналов в процессе разработки. Наконец, мы рассказали о сценариях использования пакета каналов. .
Эта статья《Flutter 中的埋点统计-数据思维定胜负》Первый столбец статьи, а затем будет продолжать поделиться содержанием следующего трепетания✅关注, вы будете уведомлены, как только содержимое будет обновлено.

Встраивание каталога планирования статистических статей во Flutter

  • Детали многоканальной упаковки Flutter
  • Глобальный мониторинг маршрутов Flutter
  • Захват глобальных исключений Flutter
  • Последняя глобальная скрытая точка Flutter инкогнито

Репозиторий исходного кода

использовал脚本а также示例代码Все на Гитхабе

🔗 Ссылка на ссылку

обо мне

  • от 15 до 18 лет, использоватьAndroidНативно разрабатывайте приложения, связанные с интеллектуальным оборудованием
  • В мае 2018 года случайная встреча соприкоснулась сFlutter, а затем начать самостоятельное изучение, вы можете увидетьweather_flutterЭто мой практический проект начального уровня для практики Flutter (я все еще думаю, что он очень подходит для начального уровня практики Flutter).
  • В августе 2018 года под большим давлением (в то время у Flutter не было версии 1.0) он начал использовать Flutter для разработки проектов корпоративного уровня, а также разработал и поддерживал более дюжины пакетов подключаемых модулей Flutter (поскольку ресурсы подключаемых модулей в то время было очень мало)
  • На данный момент он руководил и участвовал в запуске 4 моделей корпоративного уровня.FlutterПриложение, общее количество пользователей приложения, которое в настоящее время отвечает120W+,использоватьFlutterбыл отличный опыт

👏 Добро пожаловать ➕ следите ➕ вперед, если у вас есть какие-либо вопросы, не стесняйтесь комментировать ниже👇, я отвечу как можно скорее

Следите за колонкой

  • Эта статья была включена в колонку ниже👇, вы можете обратить внимание напрямую
  • Продолжайте читать, чтобы узнать о других статьях|Серии статей постоянно обновляются