mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 17:10:43 +00:00
== 用户要求 ==
"安卓那个逻辑也要改一下,就是你输入配对码后,进入一个页面,
页面有两个按钮,第一个按钮是远控,第二个按钮是静默更新被控端"
== 做成什么样 ==
新增 choicePanel,连接成功后先进这一页:
已连接「电脑名」
电脑端 2.1.5 → 可更新到 2.2.0
[ 远控 ] <- 第一个按钮
[ 静默更新被控端 ] <- 第二个按钮
按钮顺序按用户说的来(远控在前)。
页面顶上显示电脑名和**电脑端当前版本** —— 用户之前要求
"手表端连接那个电脑端也可以查看电脑端目前所处的版本",
这里是最自然的展示位置(不弹框,只显示一行)。
为什么不让它直接进控制页:老版本的被控端可能缺功能或有 bug,
"先更新再远控"是更合理的顺序 —— 但不强制,给用户自己选。
== 一个刻意不改的地方 ==
自动切到中转服务器**恢复**时的 `showControlPanel()` **没动** ——
用户本来就在远控页,中途弹一层选择页会打断他。
测试里专门断言了这一点,免得以后有人"顺手统一一下"改坏。
== 顺手修的几个问题 ==
1. **忘了定义 lastDeviceName** —— 写选择页时凭直觉用了这个变量,
编译报"找不到符号"。补上字段并在连接回调里赋值。
(教训:写代码时要用的变量,先确认它存在。)
2. **泄漏闸门拦下我自己** —— 这两天写的一批服务器诊断/配置脚本里
硬编码了服务器 IP(26 处,5 个文件)。规则是 IP 不能进任何
被跟踪的文件。已全部改成占位符,真实值仍从
_build/.lightsail_host(已 gitignore)读。
3. **verify_all.ps1 删掉「锁屏时记 SKIP」的逻辑** ——
用户明确要求删。那个好意带来一个更糟的后果:锁屏时几关根本不跑,
回归"全绿"了但关键测试其实一跳而过。
**"因为环境不满足所以不测"比"测了发现失败"更危险。**
删掉之后果然暴露出 3 个 FAIL —— 屏幕解锁后重跑全部通过,
确认是环境问题而不是代码问题。
== 服务器这边(不在这份提交里,但同一天做的)==
* nginx 按用户要求重排:
IP(80) 任何路径 -> 404(没东西)
域名 / -> 官网;/zhongzhuanzhan -> 中转站设置
9100 -> 同样的内容(等 AWS 开防火墙)
* 删掉早年 Cloudflare Tunnel 的 systemd 残留
* **补上 ACME 挑战例外** —— 这是最要紧的一条:
80 端口原来把所有请求都 301 到 https,包括
/.well-known/acme-challenge/,**续期时会失败**。
而且它是延迟爆发的(最长 90 天后证书到期才暴露)。
* 清理 1Panel 安装包残留(223MB)
== 验证 ==
全量回归 21 关全部 PASS(零 FAIL,桌面可用状态)
Java 编译通过(android-34, --release 8)
623+ Python 文件语法通过
泄漏闸门通过
全部产物重建,Win7 兼容校验通过
61 lines
2.9 KiB
XML
61 lines
2.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||
package="com.lanremote.watch"
|
||
android:versionCode="5"
|
||
android:versionName="2.2.0">
|
||
|
||
<!-- ⚠ 允许明文 HTTP。
|
||
中转可以是"自己搭的、没有证书"的服务:局域网那台,或者
|
||
2026-10-08 之后那台有公网 IP 的服务器(http://yk.xxmxxs.top:13245)。
|
||
Android 9+ 默认**禁止明文流量**,不加这一条的话请求会被系统
|
||
直接掐掉,日志里只有一句含糊的
|
||
"Cleartext HTTP traffic to ... not permitted"。
|
||
|
||
安全性说明:中转上跑的内容(配对令牌、画面、文件)本来就是
|
||
加密过的,明文只暴露 URL 和设备名。要更严的话后续上 HTTPS
|
||
(Let's Encrypt),那时可以把这一条去掉。 -->
|
||
<uses-permission android:name="android.permission.INTERNET" />
|
||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||
|
||
<!--
|
||
启动时一次性申请完,之后选图片/音频不再弹权限框。
|
||
Android 13(API 33) 起用细分媒体权限;12 及以下用 READ_EXTERNAL_STORAGE。
|
||
-->
|
||
<uses-permission
|
||
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||
android:maxSdkVersion="32" />
|
||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||
|
||
<uses-feature android:name="android.hardware.type.watch" android:required="false" />
|
||
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
|
||
|
||
<application
|
||
android:label="@string/app_name"
|
||
android:icon="@drawable/ic_launcher"
|
||
android:allowBackup="false"
|
||
android:theme="@android:style/Theme.Material.Light.NoActionBar"
|
||
android:hardwareAccelerated="true"
|
||
android:usesCleartextTraffic="true"
|
||
android:requestLegacyExternalStorage="true">
|
||
|
||
<activity
|
||
android:name=".MainActivity"
|
||
android:exported="true"
|
||
android:label="@string/app_name"
|
||
android:screenOrientation="portrait"
|
||
android:configChanges="orientation|screenSize|keyboardHidden"
|
||
android:windowSoftInputMode="adjustResize">
|
||
<intent-filter>
|
||
<action android:name="android.intent.action.MAIN" />
|
||
<category android:name="android.intent.category.LAUNCHER" />
|
||
</intent-filter>
|
||
</activity>
|
||
</application>
|
||
</manifest>
|