🔥🔥🔥 Последняя версия для Flutter 2.2
Я Зеро, не много ерунды, карта мозга будет представлена первой
- Сначала лайк, потом смотри, обновляй навсегда 👏
Пока вы уделяете внимание 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
- Посмотреть Результаты
Здесь вы можете видеть, что соответствующее содержимое параметра было отображено.Далее вопрос о том, как использовать конкретный бизнес-уровень.В следующем содержании также будут представлены сценарии использования, продолжайте читать👇👇
Многоканальная отладка
Сначала мы видели эффект, но в процессе разработки мы не всегда можем запустить командную строку, чтобы увидеть эффект.IDE
Было бы здорово вести многоканальную отладку и разработку, представим их отдельно.VS Code
а такжеAndroid Studio
способ конфигурации.
Vs Конфигурация кода
- сначала создайте
launch.json
файл запуска
- Затем настройте пункт параметров запуска
{
"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
Беги, чтобы увидеть эффект
Конфигурация Android-студии
- Сначала настройте параметры команды
- Добавить к
Mi
Параметры конфигурации канала
Скопируйте его первымFlutter
конфигурации, а затем измените имя наMi
, и измените конфигурацию параметра команды какMi
а также安卓之光
На этом настройка Android Studio в основном завершена. Давайте переключимся и запустим, чтобы увидеть эффект.
Настройка 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/
Видно здесь после переименования пакета 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 安卓之光
Таким образом, упаковка может быть завершена автоматически.После запуска скрипта вы можете пойти выпить чашечку кофе, и кофе также будет упакован.
После того, как пакет будет готов, мы можем отдельно протестировать пакет канала и загрузить его в соответствующий магазин приложений.
сцены, которые будут использоваться
Статистика
Что касается работы, необходимо учитывать загрузку, установку, использование, ежедневную активность, еженедельную активность, ежемесячную активность, эффект активности и т. д. для каждого магазина приложений (канала), поэтому очень важно различать по каналам .распределение каналов.
На стороне разработки нам нужно различать ненормальные состояния каждого канала, и соответствующие файлы символов во время упаковки также различаются.Например, Bugly можно настроить таким образом, чтобы завершить настройку файлов символов разных каналов.
// android/app/build.gradle
bugly {
appId = 'ZeroFlutter'
appKey = 'GitHub:https://github.com/yy1300326388'
// 这里配置渠道参数即可
appChannel = "${dartEnvironmentVariables.APP_CHANNEL}"
}
В другом примере, если нам нужно установить информацию о канале Umeng, мы можем напрямую вызвать настройки API через код Dart.
/// 初始化友盟,直接将 EnvironmentConfig.APP_CHANNEL 传入渠道参数
UmengSdk.initCommon(kUmengAndroidAppkey, kUmengIosAppkey, EnvironmentConfig.APP_CHANNEL);
Затем вы можете видеть статистические данные в фоновом режиме, что нам удобно для дальнейшей работы и развития.
распределение каналов
Требования каждого магазина приложений различаются. Некоторая конфигурация копирайтинга карточек, некоторая информация об авторских правах карточек и использование некоторых разрешений карточек могут обрабатываться по-разному для разных каналов. Мы можем добавить суждение для обработки разных логик.mixin
EnvironmentConfig.APP_CHANNEL == 'Mi'
? Text(
"小米渠道显示",
style: Theme.of(context).textTheme.bodyText1,
)
: SizedBox()
Здесь мы работаем отдельноZeroFlutter
а такжеMi
канал, чтобы увидеть эффект
Суммировать
На этом статья подходит к концу. В основном мы говорили об использовании и настройке параметров команды, а также о навыках настройки IDE и отладки пакета каналов в процессе разработки. Наконец, мы рассказали о сценариях использования пакета каналов. .
Эта статья《Flutter 中的埋点统计-数据思维定胜负》
Первый столбец статьи, а затем будет продолжать поделиться содержанием следующего трепетания✅关注
, вы будете уведомлены, как только содержимое будет обновлено.
Встраивание каталога планирования статистических статей во Flutter
- Детали многоканальной упаковки Flutter
- Глобальный мониторинг маршрутов Flutter
- Захват глобальных исключений Flutter
- Последняя глобальная скрытая точка Flutter инкогнито
Репозиторий исходного кода
использовал脚本
а также示例代码
Все на Гитхабе
🔗 Ссылка на ссылку
- Flutter 1.17 — больше никаких Flavors, никаких iOS Schemas Аргумент команды, который меняет все
- Creating flavors for Flutter
- The Flutter command-line tool
обо мне
- от 15 до 18 лет, использовать
Android
Нативно разрабатывайте приложения, связанные с интеллектуальным оборудованием - В мае 2018 года случайная встреча соприкоснулась с
Flutter
, а затем начать самостоятельное изучение, вы можете увидетьweather_flutterЭто мой практический проект начального уровня для практики Flutter (я все еще думаю, что он очень подходит для начального уровня практики Flutter). - В августе 2018 года под большим давлением (в то время у Flutter не было версии 1.0) он начал использовать Flutter для разработки проектов корпоративного уровня, а также разработал и поддерживал более дюжины пакетов подключаемых модулей Flutter (поскольку ресурсы подключаемых модулей в то время было очень мало)
- На данный момент он руководил и участвовал в запуске 4 моделей корпоративного уровня.
Flutter
Приложение, общее количество пользователей приложения, которое в настоящее время отвечает120W+
,использоватьFlutter
был отличный опыт
👏 Добро пожаловать ➕ следите ➕ вперед, если у вас есть какие-либо вопросы, не стесняйтесь комментировать ниже👇, я отвечу как можно скорее
Следите за колонкой
- Эта статья была включена в колонку ниже👇, вы можете обратить внимание напрямую
- Продолжайте читать, чтобы узнать о других статьях|Серии статей постоянно обновляются