Skip to content

DroidExtend 1.5.0

Choose a tag to compare

@Blank2007 Blank2007 released this 12 Oct 10:16

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 的「安装虚拟显示器驱动」按钮对所有用户都失效,
是他找出来的。