ARTICLE · 1158217
打包成 App 后登录老是丢?我一天发了 13 个版本,把坑填完了

先说一个很容易破防的场景。
辛辛苦苦把网页项目打包成 App。
装到手机上,能打开,能登录。
然后用户刷新了一下页面——
"您还没有登录,请登录。"
登录一次,掉一次。
App 还没上线,先被登录页劝退了。
这不是段子,是我这次真遇到的问题。
所以我花了一天,把 Front2APK 从头到尾捋了一遍。
一天,13 个版本。
新能力有,修复更多。
下面这 6 个坑,如果你也在做网页转 App,早晚都会撞上。

坑一:登录一次,刷新就丢(v0.5.10)
这是最先暴露、也最要命的一个。
排查下来,原因有两个:
一是 WebView 默认没有开启第三方 Cookie,登录接口下发的 Cookie 根本存不下来。
二是 App 退到后台时,Cookie 还留在内存里,进程被系统回收后,就跟着一起没了。
两个小问题叠在一起,结果只有一个:登录状态永远留不住。
现在的处理是:
• 显式开启 Cookie 和第三方 Cookie • App 退到后台时,主动把 Cookie 落盘
登录一次,就能一直用。

坑二:端口一变,本地数据就"没了"(v0.5.7)
这个坑非常隐蔽,一开始我完全没往这个方向想。
Cookie 本身不区分端口,但 localStorage、sessionStorage 和 IndexedDB 是区分端口的。
也就是说:
同一个应用,如果每次启动的端口都不一样,网页存在 localStorage 里的登录信息,也会跟着"消失"。
它的表现是——"有时候登录状态会丢"。
时好时坏的问题,最难查。
现在:
• 每个应用的端口,按包名自动生成,固定不变 • 同一个应用每次启动,地址都一样 • 只有端口真的被占用,才临时顺延到下一个空闲端口
localStorage 里的数据,终于能稳定留下来。

坑三:包名打架,两个 App 只能活一个(v0.5.1 / v0.5.4 / v0.5.5 / v0.5.8)
这个坑最直接:装第二个 App,把第一个覆盖了。
原因很简单:多个项目共用了同一个默认包名。
更麻烦的是后面这半段:
如果哪天改了应用名称,包名也跟着变,那这个 App 在系统眼里就成了"另一个新应用",没法覆盖升级,只能卸载重装。
现在规则统一了:
• 不同项目自动生成不同包名,安装不再互相覆盖 • 包名跟随项目(目录名 / ZIP 名),改应用名称也不会变 • 每个项目的包名会被记住,下次选同一个项目,还是原来的包名 • 手动改过的包名,一直保留
一句话:同一个应用,可以一直覆盖升级。

坑四:两个 App 一起开,直接连错服务(v0.5.3 / v0.5.6)
做本地服务的 App,多半会踩这个坑。
以前多个 Node.js / Python 应用同时打开,会共用同一个固定端口。
结果是:
轻则第二个启动失败,重则它连上了第一个 App 的服务,页面显示的内容完全不对。
现在的处理:
• 端口按包名自动分配,不同 App 互不干扰 • 端口被占用时,自动改用下一个空闲端口,而不是启动失败 • 主程序端口从 3210 改成不常用的 47321 • start.bat 遇到端口被占用,会先结束占用进程再启动
不会再出现"连上了别的 App 的服务"这种诡异情况。

坑五:想打包 Python 项目?不好意思,不支持(v0.5.0)
前四个坑都是修问题,这个坑是补能力。
之前 Front2APK 支持静态前端和 Node.js,Python 项目是打包不了的。
现在新增了 Python 项目模式,使用 Chaquopy 17 在 APK 内嵌 Python 运行时。
支持:
• Python 入口文件识别 • requirements.txt 依赖安装 • 多 ABI(arm64-v8a、armeabi-v7a、x86_64) • 手机内自动启动本地 Python 服务,WebView 加载
到这里,Front2APK 能打包三种项目了:
• 纯静态前端 • Node.js 服务 • Python 服务

坑六:改了路径,应用名和包名不跟着变(v0.5.9)
这个算小坑,但很影响手感。
在"本机路径"输入框里改路径,应用名和包名不会立刻更新,必须先在别的地方点一下(让输入框失焦),才会刷新。
现在输入路径时,应用名和包名会实时跟着更新。
改完路径,结果立刻就在眼前。
顺手修的细节
除了上面 6 个坑,这次还补了一些环境相关的小问题:
• 环境检测新增 Node.js 版本和 npm 检测(v0.4.5) • 支持手动选择 Node.js 安装目录(v0.4.6) • 环境检测新增 Python 版本和 pip 检测(v0.5.0) • start.bat 窗口不再一闪而过,启动失败会保留窗口显示原因(v0.5.2)

说点实在的
一天 13 个版本,听起来挺多。
但真正有价值的不是版本号,是搞清楚了一件事:
网页转 App,最难的不是"能不能打出 APK",而是"打出来的 App 能不能一直好好用"。
前者是一次性的,后者才是长期的。
打包成功 -> 登录能记住 -> 本地数据不丢 -> 多个 App 不打架 -> 升级能覆盖 -> 三种项目都能装现在,Front2APK 能做什么
说了这么多"修了什么",那它现在到底能做什么?

一、三种项目类型都能打包
• 静态前端:纯 HTML / CSS / JS 构建产物 • Node.js 服务:内嵌 nodejs-mobile 运行时,手机内启动本地 HTTP 服务 • Python 服务:Chaquopy 内嵌 Python,支持 requirements.txt 与多 ABI
二、三种项目来源
• 上传前端构建目录 • 上传 ZIP 压缩包 • 直接填写或选择本机路径
三、应用配置
• 应用名称、包名、版本号、版本名称 • 应用图标(PNG / JPG / JPEG / WebP) • 横屏 / 竖屏 / 全屏、保持屏幕常亮 • WebView 背景色、状态栏颜色 • 开启 HTTP 明文请求 • SPA history 路由回退
四、网页与手机打通
• 支持 Android 返回键 • 支持 WebView 文件选择器 • 外部网页使用系统浏览器打开 • 网页生成的 PDF、HTML 保存到公共下载目录(Download/Front2APK/) • Cookie / 登录态持久化,刷新不掉线
五、构建与出包
• 自动识别 JDK、Android SDK、Gradle • 自动检测 Node.js / npm、Python / pip,并可手动指定安装目录 • 多 ABI:arm64-v8a、armeabi-v7a、x86_64 • APK 生成列表、项目快照、一键再次生成 • 实时查看 Gradle 构建日志 • 默认输出到项目 output/目录
一句话:从"选项目 → 配应用 → 出 APK → 重复升级",整套流程已经可以在本机完成。
项目地址
项目名称:
Front2APKGitee:
https://gitee.com/XUJINPENGSIR/front2-apk
本次版本:
v0.5.10最新提交:
3d5f1dc fix: enable webview cookies so login sessions persist如果你也遇到过:
• 打包后登录态老是丢 • 多个 App 端口冲突 • 包名打架,安装互相覆盖 • 想给 Python 项目打包
可以更新到最新版试试。