Repository navigation
DroidExtend 1.5.0
1.5.0 —— 更新改成在程序里做,而不是把你丢给浏览器
以前的「检查更新」只会弹一句"有新版本",然后打开浏览器。剩下的全靠你自己:
判断该下哪个文件、下完对不对、装到哪。这一版把整条路走完。
在程序里下载、校验、安装
工具 → 检查更新 → 有新版本时列出更新说明和安装包大小 → 点「下载并安装」,
带进度条下载完后再确认一次,然后程序自己退出、安装、重新启动。
下载的每一步都要过五道检查,任何一条不过就不装,并当场告诉你哪一条没过:
- 地址必须是 GitHub 官方域名(https),重定向之后的地址要重新检查一遍
- 官方必须给出校验和(优先取 GitHub API 的
digest字段,其次取 release 正文里的校验表) - 字节数要与官方一致(先对传输头,落盘后再对一次)
- SHA256 必须与官方一致
- 文件头必须是
MZ(可执行文件)
最后一条不是形式主义:测试里拿 APK 冒充安装包时,只要把校验和一起改成 APK 的,
前四条全能过——只有 MZ 能拦住。
关于签名,说实话
这个项目没有代码签名证书,安装包始终是「未签名」。程序不会假装它是签过名的:
确认框里直接写明完整性靠校验和保证、不靠签名。README 的常见问题里也写清楚了
校验和能挡什么(下载被篡改、中间人换包、代理返回半截文件),
以及挡不住什么(仓库本身被控制)。
安装包也换了个方式落地
正在运行的程序没法覆盖自己的 exe,所以更新时会写一个临时批处理:等你原来的进程
真的退出后,用 /SILENT /NORESTART /DIR="<当前安装目录>" 安装,
再把新版本拉起来。/DIR 是写死的——万一注册表里那条安装记录丢了,
更新会静默装出第二份程序,桌面快捷方式还指着旧的那份,用户只会觉得"更新没生效"。
另外
- 更新说明现在会渲染成正常文字(标题、加粗、链接),不再把 Markdown 语法原样糊脸上
README.md的安装包链接改成指向 releases 页面(安装包文件名带版本号,直链每版都会失效)- 修复
release.py上传大文件的问题:urllib会去读 Windows 注册表里的代理设置,
上传 36 MB 安装包时被本机代理掐断([Errno 10054]),现在显式不使用代理
CI 补上了
仓库门面(issue 模板、CONTRIBUTING、SECURITY、LICENSE/NOTICE)之后,CI 也推上去了
(之前缺 token 权限)。两个 job:
- 静态检查 ——
compileall;版本号三处一致(host/version.py、安装包#define AppVer、
AndroidManifest.xml的versionName)——这一条正是当初让四个发布版版本号漂移的同类问题;
禁止写死开发机路径(就是 issue #1 的根因);PowerShell 脚本语法 - 安卓端能编译 —— 起 JDK 17,下
build-tools_r34-windows.zip与platform-34-ext7_r03.zip,
aapt2生成R.java后用javac -bootclasspath android.jar编译全部 8 个 java 文件
仍未完成
- 安装包仍无代码签名(同上,已如实写在程序的更新确认框里)
- 更新不做差分下载,每次完整下载约 35 MB
- CI 只证明"能编译",不产出 APK、不跑测试——仓库里 40 多个探针脚本都依赖真机,上不了 CI
感谢 @Bai-2008 在 issue #1
里那份写得非常细的报告——v1.1.0–v1.4.0 的「安装虚拟显示器驱动」按钮对所有用户都失效,
是他找出来的。