Super Productivity Android 无网络模式(Connectivity-Free Mode)配置与本地构建指南 Super Productivity Android 无网络模式Connectivity-Free Mode配置与本地构建指南【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivityConnectivity-Free Mode无网络模式是 Super Productivity Android 应用提供的一种完全离线运行方式允许你在没有互联网连接的情况下使用应用的核心功能任务管理、时间追踪、番茄钟等数据仅保存在本机。本文基于 android/README_OFFLINE.md 编写并结合仓库源码详细讲解如何通过app_config.properties配置启动模式、如何在本地从源码构建并安装 Android 应用以及底层启动决策机制的实现原理。读完本文你将能够独立完成无网络模式的配置、APK 构建与设备安装全流程。一、Connectivity-Free Mode 是什么Connectivity-Free Mode 是 Super Productivity Android 应用于 2024 年 10 月引入的新运行模式。在该模式下应用完全在本地运行不再依赖任何远程服务器主要特点包括核心功能完全离线可用任务、时间追踪、提醒、聚焦模式等功能均在本机 WebView 内运行无需联网按需同步你仍然可以自行选择通过 WebDAV、Dropbox 等方式同步数据也可以选择完全不进行任何网络访问解决 CORS 问题该模式修复了 WebDAV 同步中的跨域资源共享CORS问题使本地或自托管资源的同步更加顺畅安全无缝升级已有用户可继续使用旧的 Online-Only Mode兼容模式新用户可以立即体验无网络模式未来版本还将提供平滑的迁移方案。从源码结构看无网络模式对应的是一个基于 Capacitor 的全新主 Activity——CapacitorMainActivity.kt其类注释明确写着 All new Super-Productivity main activity, based on Capacitor to support offline use of the entire application基于 Capacitor 的全新主 Activity用于支持整个应用的离线使用。而旧的 Online-Only Mode 则对应 FullscreenActivity.kt它通过加载远程服务器 URL 来运行应用。二、启动模式Launch Mode概述应用支持三种启动模式统一由LAUNCH_MODE配置项控制取值含义说明0默认行为读取 SharedPreferences 中的已保存模式结合安装/升级状态自动决策详见下文源码解析1强制 Online-Only Mode强制使用兼容模式需要联网连接生产、本地开发或自托管服务器2强制 Connectivity-Free Mode推荐强制使用全新的无网络模式完全离线运行对于新安装用户设置LAUNCH_MODE2可确保应用启动即进入无网络模式从一开始就避免任何连接在线服务的尝试提供无缝的离线体验。重要提示如果设置LAUNCH_MODE0应用使用默认行为可能会读取 SharedPreferences 并尝试连接在线服务。要保持纯粹离线体验新安装务必设置为2。三、配置文件app_config.properties 全参数详解启动模式的配置位于 android/app/app_config.properties。该文件包含四个关键配置项它们的完整定义如下# LAUNCH_MODE 决定启动行为 # - 0: 默认行为读取 SharedPreferences # - 1: 强制 Online-Only Mode兼容模式 # - 2: 强制 Connectivity-Free Mode新的全离线模式 # 默认值: 0 LAUNCH_MODE0 # ONLINE_SERVICE_IS_LOCAL 决定应用是否在开发期连接本地服务器 # - true: 连接本地服务器通常用于开发与测试 # - false: 连接远程服务器用于 staging 或生产环境 # 默认值: true ONLINE_SERVICE_IS_LOCALfalse # ONLINE_SERVICE_HOST 指定服务器地址可设置为你自托管的服务器地址 # - 当 ONLINE_SERVICE_IS_LOCALtrue 时该值被忽略改用 10.0.2.2:4200Android 模拟器的 localhost # - 当 ONLINE_SERVICE_IS_LOCALfalse 或为 release 构建时该值决定应用连接的服务器 # 默认值: app.super-productivity.com ONLINE_SERVICE_HOSTapp.super-productivity.com # ONLINE_SERVICE_PROTOCOL 定义与服务器通信的协议 # - http: 通常用于本地开发或非安全环境 # - https: 用于安全的生产环境 # - 在 debug 构建且 ONLINE_SERVICE_IS_LOCALtrue 时默认使用 http否则使用此值 # 默认值: https ONLINE_SERVICE_PROTOCOLhttps无网络模式的完整配置Connectivity-Free Mode 除设置LAUNCH_MODE外不需要任何额外配置。推荐配置为LAUNCH_MODE2设置完成后重新构建应用即可生效。配置文件如何注入构建这些属性并不是在运行时动态读取的而是在Gradle 构建阶段被编译进BuildConfig。相关逻辑位于 android/app/config.gradleloadAppConfig从android/app/app_config.properties加载属性getBuildConfigFields根据构建类型Debug/Release计算最终字段LAUNCH_MODE直接透传当ONLINE_SERVICE_IS_LOCALtrue且为 Debug 构建时ONLINE_SERVICE_HOST被强制替换为10.0.2.2:4200、ONLINE_SERVICE_PROTOCOL被强制替换为http否则使用配置文件中或默认值的ONLINE_SERVICE_HOST与ONLINE_SERVICE_PROTOCOL。这解释了为何修改app_config.properties后需要重新构建 APK 才能生效。四、底层启动决策机制解析启动模式的实际决策逻辑由 LaunchDecider.kt 负责理解它能帮助你更清楚地把握LAUNCH_MODE0的默认行为到底是什么定义了三个模式常量MODE_DEFAULT 0待决策、MODE_ONLINE 1旧 Activity、MODE_OFFLINE 2新 ActivitygetLaunchMode()首先读取BuildConfig.LAUNCH_MODE为1时强制进入 Online-Only Mode为2时强制进入 Connectivity-Free Mode为0或无法解析时读取 SharedPreferences 中已保存的模式并调用determineLaunchMode()决策determineLaunchMode()的关键判断依据通过firstInstallTime lastUpdateTime判断是否为全新安装——全新安装直接进入 MODE_OFFLINE无网络模式若是升级安装且 SharedPreferences 无已保存模式则检查databases/SupKeyValStore文件是否存在hasLegacyData()存在说明用户有旧数据进入 Online-Only Mode 保持兼容否则进入无网络模式决策结果会被写回 SharedPreferences供后续启动复用。在旧 Activity FullscreenActivity.kt 中启动时会调用launchDecider.shouldSwitchToNewActivity()若返回true则通过Intent.setComponent切换到CapacitorMainActivity。两个 Activity 均在 AndroidManifest.xml 中声明其中CapacitorMainActivity的注释明确标注 All new Super-Productivity main activity, based on Capacitor to support offline use。五、本地构建与运行全流程1. 克隆仓库需要注意请克隆super-productivity主仓库而不是直接克隆super-productivity-android仓库以确保所有子模块包括 Android 项目被正确初始化git clone https://github.com/super-productivity/super-productivity.git cd super-productivity git submodule init git submodule update2. 编译 Node.js 项目确保已安装 Node.js 和 npm然后在super-productivity根目录安装依赖npm install3. 编译 Android 项目在根目录下使用 npm 脚本编译 Android 项目测试构建对应 package.json 中的dist:android脚本先生成 stage Web 前端再打包 debug 变体npm run dist:android该命令最终输出位于android/app/build/outputs/apk/debug/下的 Staging APK。生产构建对应dist:android:prod脚本先生成生产 Web 前端再打包 release 变体npm run dist:android:prod该命令最终输出位于android/app/build/outputs/apk/release/下的 Production APK。4. 安装到设备安装已编译的 APK 有两条路径方式一使用 Android Studio打开 Android Studio选择Open an existing project导航到克隆仓库中的android目录即 android/按提示在你的设备或模拟器上构建并运行应用。方式二使用 npm 脚本需已连接设备且启用 ADB测试安装npm run install:android生产安装npm run install:android:prod这两个脚本对应 package.json 中的install:android与install:android:prod底层执行adb install -r安装对应 flavorfdroid debug / fdroid release的 APK。六、使用注意事项本地修改专用app_config.properties仅用于本地修改。除非你完全确定改动内容否则不要提交DO NOT COMMIT此文件以免将本地服务器地址或调试配置带入版本库无需额外配置Connectivity-Free Mode 除了设置LAUNCH_MODE为0或2之外不需要任何其他配置配置与构建的耦合由于配置在 Gradle 构建期被编译进BuildConfig修改配置后必须重新构建并重新安装 APK在线模式对照如需连接生产、本地开发或自托管服务器可参考 Online-Only Mode 的详细配置文档 android/README_ONLINE.md其中说明了ONLINE_SERVICE_IS_LOCAL、ONLINE_SERVICE_HOST、ONLINE_SERVICE_PROTOCOL三种在线场景的组合用法模式切换借助LAUNCH_MODE与上述网络服务配置项的组合可以在默认、在线、离线三种启动行为之间无缝切换而无需修改任何 Kotlin 源码文件这极大方便了日常开发与部署的灵活性。七、常见问题速查场景建议配置全新安装希望完全离线使用LAUNCH_MODE2升级安装沿用默认行为LAUNCH_MODE0系统自动检测旧数据决定模式强制使用在线兼容模式LAUNCH_MODE1并按需设置ONLINE_SERVICE_IS_LOCAL、ONLINE_SERVICE_HOST、ONLINE_SERVICE_PROTOCOL开发调试连接本地服务器LAUNCH_MODE1ONLINE_SERVICE_IS_LOCALtrueDebug 构建自动指向http://10.0.2.2:4200连接自托管服务器LAUNCH_MODE1ONLINE_SERVICE_IS_LOCALfalse 自定义ONLINE_SERVICE_HOST/ONLINE_SERVICE_PROTOCOL如需获取更全面的应用信息可查阅 android/README.md启动模式总览与配置索引以及仓库根目录的 README.md项目整体说明。【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考