首页 / 资讯中心 / 文章详情

VLC Android 自动化构建发布与截图流水线:基于 fastlane 的完整实操指南

VLC Android 自动化构建发布与截图流水线:基于 fastlane 的完整实操指南 ★ FEATURED ARTICLE
音视频移动开发【免费下载链接】vlc-androidVLC for Android, Android TV and ChromeOS项目地址https://gitcode.com/gh_mirrors/vl/vlc-android点击查看免费下载本文以仓库buildsystem/automation/README.md为核心骨架结合 Fastfile、Screengrabfile、Pluginfile、Appfile 以及截图测试源码系统讲解 vlc-android 项目如何用 fastlane 一键完成 Play Store / Huawei AppGallery / FTP 分发以及如何自动截取手机、平板与 TV 的商店宣传截图。读完本文你将掌握这套流水线的安装配置、各 lane 的用途与参数、APK 命名约定、截图测试的底层实现以及从截图到成图到上传的完整链路。一、流水线全景buildsystem/automation 目录里有什么vlc-android仓库把构建发布与截图自动化集中在buildsystem/automation/目录下其结构如下README.md本文讲解的官方说明是整套流水线的使用入口GemfileRuby 依赖清单声明fastlane并加载fastlane/Pluginfilefastlane/fastlane 配置目录包含Fastfilelane 定义、Appfile商店凭据与包名、Pluginfile第三方插件、Screengrabfile截图参数framing/截图后期美化素材含locale/*.po翻译文案与templates/设备模板Pixel 2 XL、7 英寸、10 英寸平板等generate_images.sh截图后处理脚本把原始截图叠加到设备模板上并写入各语言宣传文案。整条流水线的分工是fastlane lane 负责「构建→测试→截图→上传」generate_images.sh负责**「截图成品化」**二者配合产出可直接投放到应用商店的素材与发布版本。二、安装与环境准备2.1 安装 fastlane含 Linux官方文档推荐直接安装 fastlane虽然 Linux 并非官方支持平台但该项目给出了经过验证的简易安装路径sudo apt install ruby ruby-dev安装完成后设置语言环境fastlane 对 locale 有要求export LC_ALLen_US.UTF-8 export LANGen_US.UTF-8然后通过 RubyGems 全局安装sudo gem install fastlane从源码结构看仓库还通过 Gemfile 与 Pluginfile 固定了运行期依赖fastlane本体、fastlane-plugin-huawei_appgallery_connectHuawei AppGallery 上传、fastlane-plugin-ftp与net-ftpFTP 上传。首次使用前建议在buildsystem/automation/目录执行bundle install随后统一通过bundle exec fastlane ...调用保证插件版本一致。2.2 配置 Android SDK截图 lane 需要编译 app 与测试 APK因此 SDK 必须已安装并导出环境变量export ANDROID_SDK/path/to/sdk/Fastfile中的gradleaction 会基于该变量定位 SDK 执行构建例如gradle(task: assemble, build_type: Debug, project_dir:../..)。2.3 统一命令格式README 明确给出所有 lane 的统一调用方式bundle exec fastlane [command] [option_key1]:[option_value_1] ...几乎所有 lane 都接受version选项它对应 APK 文件名中的版本串详见下文命名约定。三、发布部署 lanes多渠道分发Fastfile中platform :android块Fastfile定义了发布与测试两类 lane。发布类 lane 的前提是CI 完成构建并签名后把 APK 拷贝到本目录或通过环境变量FASTLANE_APK_PATH指定 APK 所在路径仅支持相对路径。Fastfile第 21 行apkPath ENV[FASTLANE_APK_PATH]即为该变量的读取点所有文件名检查均以它作为前缀。3.1 APK 命名约定与变体清单所有发布 lane 都围绕 4 个 CPU 架构变体展开定义于 Fastfilevariants [arm64-v8a, armeabi-v7a, x86, x86_64]对应的 APK 文件名格式为VLC-Android-version-variant.apk。例如执行bundle exec fastlane deploy_beta version:3.3.1-Beta-1将校验并处理以下 4 个文件VLC-Android-3.3.1-Beta-1-arm64-v8a.apk VLC-Android-3.3.1-Beta-1-armeabi-v7a.apk VLC-Android-3.3.1-Beta-1-x86.apk VLC-Android-3.3.1-Beta-1-x86_64.apkFastfile中的checkAPKFileExists(version, checkSha)第 23-43 行会在上传前逐一核对文件是否存在缺失时打印File name doesnt exist并调用UI.user_error!中止 lane第二个参数为true时还会额外检查同名.sha256校验文件。因此version选项必须与 CI 产物文件名中的版本串严格一致。3.2 Google Playdeploy_release / deploy_beta前置条件README 原文要求获取 Play Store 服务账号证书复制到./certificates/vlc.jsonAppfile第 1 行json_key_file(certificates/vlc.json)即指向该文件同时第 2 行声明了应用包名org.videolan.vlc导出环境变量K8S_SECRET_VLC_PLAYSTORE_PUBLIC_API_KEY存放 Play Store API key导出环境变量SLACK_URL存放 Slack Webhook 地址各 lane 成功后通过slack(message: ...)通知。两个核心 lanedeploy_release向 Play Store 发布release正式版草稿。源码对应 Fastfile上传时跳过 metadata、changelogs、images 与 screenshotsskip_upload_*均为truerelease_status:draft保证不会直接上架随后 Slack 通知Successfully created a new draft for version。deploy_beta向 Play Store 发布beta 草稿。源码对应 Fastfile实际执行两次上传先把app-release-signed.aab见getAabList以 draft 状态提交到internal轨道再把 4 个 APK 提交到beta轨道。此外 Fastfile 还定义了 README 未列出的deploy_internal同款逻辑双份提交到internal轨道第 96-101 行适合做内测分发。3.3 Huawei AppGallerydeploy_huawei前置条件导出 3 个环境变量HUAWEI_CLIENT_ID HUAWEI_CLIENT_SECRET HUAWEI_APP_IDdeploy_huawei向华为 AppGallery 发布release 草稿submit_for_review: false表示不提交审核Fastfile。注意该 lane 只上传arm64-v8a单架构 APKapkPathVLC-Android-options[:version]-arm64-v8a.apk成功后 Slack 通知。Fastfile 还提供了调试辅助 lanehuawei_info第 127-133 行通过huawei_appgallery_connect_get_app_info读取应用信息可用于验证三个凭据变量是否配置正确。3.4 FTPdeploy_ftp前置条件导出 1 个环境变量VIDEOLAN_FTP_HOSTdeploy_ftp以匿名账户username: anonymous,password: 把 4 个 APK 及对应的 4 个.sha256文件上传到 FTP 服务器的/incoming/[version]目录Fastfile。该 lane 上传前会以checkAPKFileExists options[:version], true严格校验APK 与 SHA256 双双齐全缺失任一文件即中止。README 明确上传目标目录就是/incoming/[version]其中[version]由version选项决定。3.5 商店素材上传deploy_screenshots / deploy_descriptionsdeploy_screenshots把本地截图上传到 Play Store 的 draft 版本。与发布 lane 不同它跳过 APK 上传skip_upload_apk:true且version选项此时充当version_codeFastfiledeploy_descriptions上传翻译/商店描述到 draft 版本Fastfile同样跳过截图与 APKversion作为version_code使用。四、截图自动化 lanes从测试到商店素材4.1 四个截图 laneREADME 给出了 4 个截图 lane分别面向手机、7 英寸平板、10 英寸平板与 TVscreenshots手机截图Fastfilescreenshots_seven7 英寸平板截图device_type:sevenInch第 109-113 行screenshots_ten10 英寸平板截图device_type:tenInch第 115-119 行screenshots_tvTV 截图device_type:tv并指定use_tests_in_classes:org.videolan.vlc.TvScreenhotsInstrumentedTest第 121-125 行。每个 lane 都会先自动构建应用与测试 APK再调用 screengrab 截图gradle(task: assemble, build_type: Debug, project_dir:../..) gradle(task: :application:app:assemble, build_type: DebugAndroidTest, project_dir:../..) capture_android_screenshots( app_apk_path: ../../application/app/build/outputs/apk/debug/VLC-Android-version-debug-all.apk, tests_apk_path: ../../application/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk )由此可知产物路径与命名调试包为application/app/build/outputs/apk/debug/VLC-Android-version-debug-all.apk测试包为application/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk其中version即version选项值。4.2 截图前置条件README 明确要求运行截图 lane 前完成 3 件事创建 3 个 AVD模拟器分别对应手机、7 英寸与 10 英寸平板TV lane 另需 TV 形态的模拟器/设备安装 VLC把编译出的应用安装到各 AVD添加样例媒体为媒体库提供可展示的音视频文件。此外还应跳过欢迎onboarding页面并让媒体库扫描完成否则截图内容为空或停留在引导页。测试基类 BaseUITest.kt 通过GrantPermissionRule自动授予READ_EXTERNAL_STORAGE权限并在Before中启动媒体库为截图测试铺路。4.3 Screengrabfile截图测试的全局参数Screengrabfile 是 screengrab 插件的配置文件其中关键参数如下app_package_name(org.videolan.vlc.debug)被测试的应用包名debug 变体use_tests_in_classes([org.videolan.vlc.PhoneScreenhotsInstrumentedTest])默认执行手机截图测试类test_instrumentation_runner(org.videolan.vlc.MultidexTestRunner)使用多 dex 测试 Runner对应源码 MultidexTestRunner.ktuse_adb_root(true)以 root 权限执行 adb 命令供 Demo Mode 设置使用locales([...])约 30 种语言列表覆盖 en-US、fr-FR、zh-CN、zh-TW、ja-JP、ko-KR 等screengrab 会逐个语言重置 locale 并重新截图clear_previous_screenshots(false)保留本地历史截图。4.4 截图测试的源码实现截图并非手工操作而是由 Espresso UIAutomator screengrab 驱动的插桩测试完成PhoneScreenhotsInstrumentedTest.kt 通过ActivityTestRule(MainActivity::class.java)启动主界面模拟用户点击音频页、播放列表、均衡器、视频列表、视频播放器与文件浏览器并在每个关键界面调用ScreenshotUtil.takeScreenshotbeforeTest()还会用Intent注入两个伪造的 UPnP/SMB 条目My NAS、My SMB server用于浏览器页截图TvScreenhotsInstrumentedTest.kt 启动MainTvActivity通过 DpadHelper 的pressDPad、pressDPadCenter、pressPip等遥控器按键驱动 TV UI依次截取tv_home、tv_audio_list、tv_audio_player、tv_video_list、tv_video_player、tv_pipScreenshotUtil.kt 是截图入口Screengrab.screenshot(${normalizeNumber(number)}_$title)编号不足两位补零从而生成01_video_list、02_audio_list这类按序命名的文件供后续上传排序DemoModeRule.kt 与 DemoModeEnabler.kt 在测试前后开启/关闭 Android系统 Demo 模式隐藏通知栏、固定 WiFi/移动网络满格、电池 100%、时钟 10:00确保截图状态栏统一、美观样例媒体元数据可参考 basic_stub.json它记录了预设媒体的标题、路径、时长、艺术家、专辑等信息配合 prep_media.py基于pymediainfo从本地文件提取媒体信息并生成该类 JSON即可在调试构建中注入「媒体库桩数据」让截图页面有内容可展示。4.5 截图上传截图生成后执行bundle exec fastlane deploy_screenshots version:version_code即把截图上传到 Play Store draft见 3.5 节。五、截图成图与本地开发辅助自动化截图产出的是纯应用界面而商店上架还需要套上设备外壳与文案。仓库用 generate_images.sh 完成这一步脚本会编译 framing/locale 下的.po翻译为.mo按fastlane/metadata/android/lang/images/type/目录遍历各语言与机型调用 ImageMagick 的magick把原始截图合成到 framing/templates 中的 Pixel 2 XL、7 英寸、10 英寸设备模板上并叠加对应语言的宣传标语如 Play all video formats、Intuitive audio player。脚本支持-p/-s/-t分别只处理手机、7 英寸、10 英寸机型-r清空framed/输出目录-v输出详细日志。另外 Fastfile 还提供了两个本地验证用 lanetest执行 Gradle 单测与test_files打印当前version对应的 4 个 APK 文件名清单并校验存在性方便在不真正上传的情况下核对产物命名。六、端到端工作流速览把以上内容串起来一次完整的版本发布与截图更新大致是准备环境安装 fastlane 与 Android SDK导出ANDROID_SDK、SLACK_URL等变量CI 构建并签名 4 个架构的 APK或 AAB放置到FASTLANE_APK_PATH指定目录发布bundle exec fastlane deploy_beta version:3.3.1-Beta-1或deploy_release/deploy_huawei/deploy_ftp截图准备 AVD、安装 VLC、添加样例、跳过欢迎页然后依次运行screenshots、screenshots_seven、screenshots_ten、screenshots_tv成图运行generate_images.sh生成带设备模板与多语言文案的商店宣传图上传bundle exec fastlane deploy_screenshots version:version_code把素材送入 Play Store draft。七、注意事项与限制version选项必须与 APK 文件名中的版本串完全一致否则checkAPKFileExists会报Missing files to upload. See above并中止FASTLANE_APK_PATH仅支持相对路径README 原文限定且Fastfile在拼接文件名后以../前缀检查文件实际使用时需按目录层级放置 APKLinux 安装 fastlane 非官方支持路径务必先设置LC_ALL/LANG为en_US.UTF-8再gem install避免 locale 相关报错所有发布 lane 均以draft草稿状态提交release_status:draft、Huawei 侧submit_for_review: false不会直接上架需人工在商店后台确认FTP 上传使用匿名凭证目标目录固定为/incoming/[version]。八、延伸阅读fastlane 配置总览全部 lane 的源码级定义插件依赖声明Huawei / FTP 插件来源商店凭据与包名certificates/vlc.json与org.videolan.vlc截图测试基类权限与媒体库初始化媒体信息提取脚本为媒体库桩数据生成 JSON赞分享音视频移动开发【免费下载链接】vlc-androidVLC for Android, Android TV and ChromeOS项目地址https://gitcode.com/gh_mirrors/vl/vlc-android点击查看免费下载相关推荐Standard Notes 移动端发布流水线基于 fastlane 的 iOS 与 Android 自动化部署指南Standard Notes 移动端发布流水线基于 fastlane 的 iOS 与 Android 自动化部署指南 导读 本文围绕 packages/mob前端桌面应用移动开发用fastlane构建iOS自动化发布流水线从开发到上架的完整指南用fastlane构建iOS自动化发布流水线从开发到上架的完整指南 还在为iOS应用的手动打包、证书管理、App Store提交而烦恼吗fastlane作为开发工具CI/CD移动开发Sequel Ace 自动化发布操作全指南GitHub Actions 与 Fastlane 驱动的 macOS App 发布流水线Sequel Ace 自动化发布操作全指南GitHub Actions 与 Fastlane 驱动的 macOS App 发布流水线 导读 本文基于 Sequ数据库桌面应用开发工具上一篇Rocket.Chat Helm Chart 部署指南Kubernetes 上的团队聊天平台安装、配置与高可用扩展下一篇EMQX 插件多版本互斥同插件同时启用多个版本的防护机制详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站