ziren28 commited on
Commit
00f06c9
·
verified ·
1 Parent(s): 126cf9c

v2.6.1: quick launch with fallback

Browse files
Files changed (1) hide show
  1. hubble.py +62 -4
hubble.py CHANGED
@@ -308,8 +308,57 @@ def run_hubble_sync(raw_input_text, scratch_dir, log, progress, stop_event=None)
308
  except: pass
309
 
310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  def run_hubble_launch(raw_input_text, scratch_dir, log, progress, stop_event=None):
312
- """仅暖机+启动, 不同步数据 (用于重试白屏)."""
313
  def check_stop():
314
  if stop_event and stop_event.is_set():
315
  raise HubbleError("用户已中断")
@@ -320,10 +369,19 @@ def run_hubble_launch(raw_input_text, scratch_dir, log, progress, stop_event=Non
320
 
321
  sess = _init_session(raw_input_text, log, progress, check_stop)
322
  try:
323
- _do_launch(sess, log, progress, check_stop, pct_start=20, pct_end=97)
 
 
 
 
 
 
 
 
 
 
324
  png = _screenshot(sess, scratch_dir, log)
325
- log("\n=== Hubble 启动页面完成 ===")
326
- log("请查看截图确认是否成功.")
327
  progress(100)
328
  return True, png, None
329
  finally:
 
308
  except: pass
309
 
310
 
311
+ def _quick_launch(sess, log, progress, check_stop):
312
+ """快速尝试: 直接 am start intent, 不暖机. 返回 True=成功 False=白屏需兜底."""
313
+ log("[快速] 尝试直接启动 (不暖机)...")
314
+ progress(22)
315
+ check_stop()
316
+
317
+ # 先 force-stop 再启动
318
+ sess.sh(f"am force-stop {DST_PKG}", check=False)
319
+ time.sleep(2)
320
+
321
+ intent = INTENT_TEMPLATE.format(dst=DST_PKG, url=CERT_URL)
322
+ sess.sh(f'am start "{intent}"', check=False)
323
+ log(" intent 已发送, 等待 15s...")
324
+ progress(30)
325
+
326
+ for i in range(15):
327
+ check_stop()
328
+ time.sleep(1)
329
+ progress(30 + i)
330
+
331
+ # 验证: top activity + WebView 日志
332
+ top = sess.sh(
333
+ "dumpsys activity activities | grep topResumedActivity | head -1",
334
+ check=False,
335
+ ).strip()
336
+
337
+ if "LiveDummyActivity" not in top:
338
+ log(" [快速] Activity 不在前台, 需兜底")
339
+ return False
340
+
341
+ # 检查 WebView 实例是否创建 (cr_AwContents / cr_TTPlugin)
342
+ pid = sess.sh(
343
+ f"ps -ef | grep {DST_PKG} | grep -v grep | head -1 | awk '{{print $2}}'",
344
+ check=False,
345
+ ).strip()
346
+ if pid:
347
+ wv = sess.sh(
348
+ f"logcat -d --pid={pid} 2>/dev/null | grep -iE 'cr_AwContents|cr_TTPlugin' | tail -1",
349
+ check=False, timeout=10,
350
+ ).strip()
351
+ if wv:
352
+ log(" [快速] WebView 已创建, 成功!")
353
+ return True
354
+
355
+ # Activity 在前台但 WebView 未检测到 — 可能白屏
356
+ log(" [快速] WebView 未检测到, 可能白屏, 进入兜底...")
357
+ return False
358
+
359
+
360
  def run_hubble_launch(raw_input_text, scratch_dir, log, progress, stop_event=None):
361
+ """先快速直接启动, 失败则暖机+轮询兜底."""
362
  def check_stop():
363
  if stop_event and stop_event.is_set():
364
  raise HubbleError("用户已中断")
 
369
 
370
  sess = _init_session(raw_input_text, log, progress, check_stop)
371
  try:
372
+ # 第一轮: 快速尝试
373
+ if _quick_launch(sess, log, progress, check_stop):
374
+ progress(95)
375
+ png = _screenshot(sess, scratch_dir, log)
376
+ log("\n=== 快速启动成功 ===")
377
+ progress(100)
378
+ return True, png, None
379
+
380
+ # 第二轮: 完整暖机兜底
381
+ log("[兜底] 进入完整暖机+轮询流程...")
382
+ _do_launch(sess, log, progress, check_stop, pct_start=50, pct_end=97)
383
  png = _screenshot(sess, scratch_dir, log)
384
+ log("\n=== Hubble 启动页面完成 (兜底) ===")
 
385
  progress(100)
386
  return True, png, None
387
  finally: