# -*- coding: utf-8 -*- """重建被误删的 onCreate —— 这就是白屏的原因。 事故经过: 我的 purge_diagnostics.py 用"方法体里出现标记就删掉整个方法"的策略, 而 onCreate 里调了 buildDiagPanel(),于是**整个 onCreate 被删了**。 它照样能编译(Activity.onCreate 不是抽象方法), 但 setContentView 永远不执行 -> 白屏、点了没反应。 从现存代码反推出的 onCreate 该做什么: store / ui / client 初始化 (这三个字段现在没人赋值) root = FrameLayout buildConnectPanel() / buildControlPanel() / buildMirrorPanel() 三块面板都挂到 root 上,默认只显示 connectPanel setContentView(root) installCrashGuard() (内部用 ui,必须在 ui 之后) requestStartupPermissions() refreshDeviceList() """ from __future__ import annotations import sys from pathlib import Path MAIN = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\android\src" r"\com\lanremote\watch\MainActivity.java") # 插在 onDestroy 前面(字段声明之后) ANCHOR = ''' @Override protected void onDestroy() {''' ON_CREATE = ''' @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); store = new DeviceStore(this); ui = new Handler(Looper.getMainLooper()); client = new RemoteClient(); client.setDevice(store.deviceId(), store.deviceName()); root = new FrameLayout(this); root.setBackgroundColor(C_BG); // 三块面板都先建好,之后按需要显示哪一块。 // 注意顺序:控制页在最上面,镜像页居中,连接页压在最上层。 buildConnectPanel(); buildControlPanel(); buildMirrorPanel(); root.addView(controlPanel, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); root.addView(mirrorPanel, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); root.addView(connectPanel, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); controlPanel.setVisibility(View.GONE); mirrorPanel.setVisibility(View.GONE); connectPanel.setVisibility(View.VISIBLE); setContentView(root); // 崩溃兜底要放在界面建好之后(它内部要用 ui) installCrashGuard(); requestStartupPermissions(); refreshDeviceList(); appendLog("ykxmz 手表端已启动"); } ''' + ANCHOR def main() -> int: text = MAIN.read_text(encoding="utf-8") if "protected void onCreate(Bundle" in text: print(" onCreate 已经在了") return 0 if ANCHOR not in text: print(" [失败] 找不到 onDestroy 锚点") return 1 text = text.replace(ANCHOR, ON_CREATE, 1) # 顺手修一下之前留下的坏缩进 text = text.replace(" private TextView serverLabel;", " private TextView serverLabel;") MAIN.write_text(text, encoding="utf-8", newline="\n") # 复核关键点 print(" 已插入 onCreate") for name in ("super.onCreate", "setContentView(root)", "buildConnectPanel()", "buildControlPanel()", "buildMirrorPanel()", "installCrashGuard()", "requestStartupPermissions()", "refreshDeviceList()"): print(f" {name}: {'✓' if name in text else '✗'}") return 0 if __name__ == "__main__": sys.exit(main())