在 Thunderbird for Android(K-9 Mail)中查找应用版本号:App 内、系统设置与 ADB 三种方法全解

  • 移动开发
  • 企业应用

【免费下载链接】thunderbird-android

Thunderbird for Android – Open Source Email App for Android (fka K-9 Mail)

项目地址: https://gitcode.com/gh_mirrors/th/thunderbird-android
点击查看 免费下载

排查邮件客户端问题时,开发者与测试人员最需要的第一手信息就是确切的版本号:无论是提交 Bug 报告、核对某个功能是否已包含在你的构建中,还是判断是否为已知问题,都离不开它。本文基于 thunderbird-android 官方仓库的 find-your-app-version.md 编写,完整覆盖三种获取版本号的方式:应用内 About 界面、Android 系统 App 信息页、ADB 命令行,并结合仓库构建脚本(app-thunderbird/build.gradle.kts)与运行时代码(ThunderbirdApp.kt)说明版本号的来源、不同渠道(beta/daily/debug)的命名规则,以及自定义构建必须附带 commit hash 的注意事项。读完本文,你可以在任何场景下快速、准确地报告自己运行的版本。

为什么版本号对 Bug 报告如此重要

在向项目提交 Bug 报告之前,开发者需要知道你使用的是哪个版本。这是因为:

  • 不同渠道(正式版、Beta、Daily/Nightly、调试版)之间的功能与行为差异很大,一个在 Daily 版本中出现的崩溃可能早已在正式版中修复;
  • 版本号(versionName)与内部构建号(versionCode)同时用于定位问题,调试日志中打印的代码行号只有在版本匹配时才有意义;
  • 由于应用更新频繁,仅凭"我装的是最新版"这样的描述无法精确定位,必须提供明确的版本字符串。

从仓库源码看,应用启动时确实会把版本信息作为运行时的核心元数据:在 ThunderbirdApp.kt 中,appVersion 直接取自 BuildConfig.VERSION_NAME;同文件第 26-27 行在初始化遥测(Telemetry)时,又将 BuildConfig.VERSION_CODE 与 BuildConfig.VERSION_NAME 一并上报。也就是说,版本号是由 Gradle 构建时注入到 BuildConfig 中的,查到的版本字符串与构建产物严格一一对应。

版本号本身定义在模块的 defaultConfig 中。以 Thunderbird 主应用为例,app-thunderbird/build.gradle.kts 中:

defaultConfig {
    applicationId = "net.thunderbird.android"
    testApplicationId = "net.thunderbird.android.tests"

    versionCode = 4
    versionName = "25.0"

    buildConfigField("String", "CLIENT_INFO_APP_NAME", "\"Thunderbird for Android\"")
}

而 K-9 Mail 版本则定义在 app-k9mail/build.gradle.kts:

defaultConfig {
    applicationId = "com.fsck.k9"
    testApplicationId = "com.fsck.k9.tests"

    versionCode = 39004
    versionName = "25.0"
    versionNameSuffix = "a1"

    buildConfigField("String", "CLIENT_INFO_APP_NAME", "\"K-9 Mail\"")
}

注意 versionCode(构建号)与 versionName(用户可读版本名)是两个不同概念:前者是单调递增的整数,供系统判断更新;后者是给人看的版本字符串,如 25.0。

方法一:在 App 内查看(About 界面)

这是最直观的方法,适用于应用可以正常启动的场景:

  1. 启动 Thunderbird(或 K-9 Mail);
  2. 进入 设置(Settings);
  3. 选择 关于(About);
  4. 查看界面中显示的版本字符串。

About 界面通常还会一并展示版权、开源许可等信息,版本号一般位于显眼位置。如果应用可以正常打开,这是提交 Bug 报告前获取版本号最快的方式。

方法二:通过 Android 系统设置(App info)

如果应用无法启动(例如启动即崩溃),可以在系统层面查看版本号。Android 系统通常会在 App info(应用信息) 页面底部显示版本号:

  1. 打开系统 设置(Settings) 应用;
  2. 进入 应用(Apps) 或 应用和通知(Apps & notifications);
  3. 在已安装应用列表中找到并选中 Thunderbird(Beta/Daily 渠道应用图标下方的名称仍显示为 "Thunderbird",但可通过应用 ID 区分);
  4. 滚动到页面底部即可看到版本号。

提示:也可在桌面或应用抽屉中长按 Thunderbird 图标,在弹出的菜单中直接进入 App info(应用信息),快速到达同一页面。

方法三:使用 ADB 命令行(进阶)

如果你配置了 ADB(Android Debug Bridge),可以通过 dumpsys package 在命令行直接检索版本信息。ADB 的安装与配置请参考仓库文档 installing-adb.md。设备需开启 USB 调试,并通过 adb devices 确认设备已连接。

Thunderbird 各渠道的应用 ID

执行命令前,先了解各渠道对应的应用 ID(包名)。包名在 app-thunderbird/build.gradle.kts 中由 applicationId 与 buildTypes 的 applicationIdSuffix 组合而成:

渠道applicationId 后缀完整应用 IDversionName 后缀
正式版(release)无net.thunderbird.android无(如 25.0)
Beta.betanet.thunderbird.android.betab0(如 25.0b0)
Daily/Nightly.dailynet.thunderbird.android.dailya1(如 25.0a1)
Debug.debugnet.thunderbird.android.debug-SNAPSHOT(如 25.0-SNAPSHOT)

后缀规则对应 app-thunderbird/build.gradle.kts 中的 beta、daily、debug 三个 buildTypes 定义,例如:

create("beta") {
    initWith(getByName("release"))
    applicationIdSuffix = ".beta"
    versionNameSuffix = "b0"
    // ...
}

create("daily") {
    initWith(getByName("release"))
    applicationIdSuffix = ".daily"
    versionNameSuffix = "a1"
    // ...
}

debug {
    applicationIdSuffix = ".debug"
    versionNameSuffix = "-SNAPSHOT"
    // ...
}

因此,不同渠道的版本字符串是不同的:正式版显示 25.0,Beta 显示 25.0b0,Daily 显示 25.0a1。这解释了为什么 Bug 报告中"版本号"必须与渠道一一对应。

查询命令

# Thunderbird 正式版(查看 versionName,即用户可读版本号)
adb shell dumpsys package net.thunderbird.android | grep versionName

# Thunderbird Beta / Daily(查看 versionCode,即内部构建号)
adb shell dumpsys package net.thunderbird.android.beta | grep versionCode
adb shell dumpsys package net.thunderbird.android.daily | grep versionCode

# K-9 Mail(前身为 com.fsck.k9)
adb shell dumpsys package com.fsck.k9 | grep versionName

命令会输出类似下面的行:

versionName=12.1

如果设备上同时装有多个版本(例如正式版与 Beta 共存),务必用对应的应用 ID 执行查询,否则可能查到错误的版本信息。

补充:查看完整的版本信息块

dumpsys package 输出的 versionCode 与 versionName 相邻,如果你希望一次性看到两者,可以不加 grep 过滤直接查看包信息,或使用 grep -E "versionCode|versionName"。例如:

adb shell dumpsys package com.fsck.k9 | grep -E "versionCode|versionName"

输出形如:

versionCode=39004
versionName=25.0a1

这里的 versionCode=39004 与 app-k9mail/build.gradle.kts 中的 versionCode = 39004 一致——版本信息直接来自构建时的 defaultConfig,通过 BuildConfig 注入并最终写进 APK 的清单文件中。

特别说明:自定义构建(Custom Builds)

如果你是从源码仓库自行构建的应用(例如在本地执行 ./gradlew :app-thunderbird:assembleDebug 得到的调试版),仅报告版本号是不够的:

  • 本地构建不会走发布流程,versionName 会被加上 -SNAPSHOT 后缀(见上文 debug buildType 的 versionNameSuffix = "-SNAPSHOT"),无法区分不同的本地改动;
  • 同一个 versionCode/versionName 可能对应仓库中不同时间点的代码状态。

因此,提交 Bug 报告时请在版本号之外一并附上你所构建源码的 commit hash,这样开发者才能精确定位到与你运行产物完全一致的代码版本。commit hash 可通过仓库根目录下的 Git 命令获取:

git rev-parse HEAD

将输出的完整 commit hash 连同版本号(如 25.0-SNAPSHOT @ <commit-hash>)一起写入 Bug 报告即可。

总结

获取 Thunderbird for Android / K-9 Mail 的版本号共有三条路径,按场景选择:

  1. 应用能启动 → 设置 → 关于(About)界面直接查看;
  2. 应用无法启动 → Android 系统设置 → 应用信息(App info)页面底部查看;
  3. 需要精确/批量获取或设备在调试环境 → adb shell dumpsys package <应用ID> | grep versionName(或 versionCode)。

同时请牢记:正式版、Beta、Daily、Debug 各渠道的应用 ID 与版本后缀不同(net.thunderbird.android、net.thunderbird.android.beta、net.thunderbird.android.daily、net.thunderbird.android.debug,以及 K-9 Mail 的 com.fsck.k9),查询和报告时务必指明渠道;自定义构建还应附加 commit hash。版本信息由 app-thunderbird/build.gradle.kts 与 app-k9mail/build.gradle.kts 中的 defaultConfig 定义,并在运行时经 ThunderbirdApp.kt 的 BuildConfig 引用——理解了这条链路,你就能准确解读任何一次构建报告的版本号。

  • 移动开发
  • 企业应用

【免费下载链接】thunderbird-android

Thunderbird for Android – Open Source Email App for Android (fka K-9 Mail)

项目地址: https://gitcode.com/gh_mirrors/th/thunderbird-android
点击查看 免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值