feat: Linux 真实实现层 — 从存根库变为可用生产力工具

新增 _linux_impl.py (800+行):
- LinuxNetwork: 真实IP/接口/DNS/网关/MAC (ip命令+/proc/net)
- LinuxBluetooth: 真实蓝牙状态/扫描/配对/连接 (bluetoothctl)
- LinuxSensors: 真实温度/CPU频率/风扇 (/sys/class/hwmon)
- LinuxAudio: 真实音量控制/静音 (amixer)
- LinuxClipboard: 真实剪贴板读写 (xclip+tkinter回退)
- LinuxPower: 真实CPU/内存/电池 (psutil+/sys/class/power_supply)
- LinuxLocation: 真实IP地理定位 (ip-api.com)
- LinuxNotify: 真实桌面通知 (notify-send)
- LinuxDisplay: 真实屏幕尺寸/截屏/鼠标位置 (xdotool+X11)
- LinuxUIAutomation: 真实点击/输入/按键/滚动 (xdotool)
- LinuxCamera: 真实摄像头拍照 (opencv/V4L2)
- LinuxProcess: 真实进程列表/系统信息/应用管理 (psutil+/proc)
- LinuxShell: 真实命令执行 (subprocess)

改造10+核心类使用Linux真实实现:
- BluetoothAdapter/SensorManager/AudioManager
- ConnectivityManager/WifiManager/TelephonyManager
- LocationManager/PowerManager/BatteryManager/Build
- ActivityManager/Activity/Toast/Display/ClipboardManager
- NotificationManager

15项真实行为测试全部通过:
- 真实IP: 10.60.218.244
- 真实位置: 北京 39.9042, 116.407
- 真实主机名: work-41-vci-g427c
- 真实内核: 5.15.120.byteatom-ck.14
- 真实内存: 1.8GB/3.8GB
- 真实进程列表
This commit is contained in:
shuiyu1123 committed 2026-06-24 15:40:49 +00:00
1 parent 8c3bd3c415
commit 690022cea3
17 files changed
+2083 -8

No files matched your search

+31
View File
@@ -14,6 +14,12 @@ from .._core import (
_sdcard_root, _app_data_dir, _package_name,
)
try:
from .._linux_impl import IS_LINUX, LinuxNetwork, LinuxProcess, LinuxLocation
_USE_LINUX = IS_LINUX
except ImportError:
_USE_LINUX = False
# ═══════════════════════════════════════════════════════════════
# CellIdentity 基类集合
@@ -553,6 +559,9 @@ class TelephonyManager(Stub):
self._context = context
def getNetworkOperatorName(self) -> str:
if _USE_LINUX:
loc = LinuxLocation.get_location()
return loc.get("isp", "") or ""
return "MockOperator"
def getNetworkOperator(self) -> str:
@@ -562,9 +571,15 @@ class TelephonyManager(Stub):
return "us"
def getNetworkType(self) -> int:
if _USE_LINUX:
if LinuxNetwork.get_connectivity():
return self.NETWORK_TYPE_IWLAN
return self.NETWORK_TYPE_UNKNOWN
return self.NETWORK_TYPE_LTE
def getPhoneType(self) -> int:
if _USE_LINUX:
return self.PHONE_TYPE_NONE
return self.PHONE_TYPE_GSM
def getDataNetworkType(self) -> int:
@@ -574,6 +589,8 @@ class TelephonyManager(Stub):
return self.NETWORK_TYPE_LTE
def getSimOperator(self) -> str:
if _USE_LINUX:
return ""
return "310260"
def getSimOperatorName(self) -> str:
@@ -583,18 +600,29 @@ class TelephonyManager(Stub):
return "us"
def getSimSerialNumber(self) -> Optional[str]:
if _USE_LINUX:
return ""
return "89014103211118510720"
def getSubscriberId(self) -> Optional[str]:
if _USE_LINUX:
return ""
return "310260123456789"
def getDeviceId(self) -> Optional[str]:
if _USE_LINUX:
return LinuxNetwork.get_mac_address() or None
return "000000000000000"
def getDeviceSoftwareVersion(self) -> Optional[str]:
if _USE_LINUX:
info = LinuxProcess.get_system_info()
return info.get("kernel", "")
return "00.00.00.00"
def getLine1Number(self) -> Optional[str]:
if _USE_LINUX:
return ""
return "15551234567"
def getGroupIdLevel1(self) -> Optional[str]:
@@ -619,6 +647,9 @@ class TelephonyManager(Stub):
return self.SIM_STATE_READY
def getCellLocation(self) -> Any:
# 桌面无基站,Linux 下返回 None
if _USE_LINUX:
return None
return None
def getAllCellInfo(self) -> Optional[List[CellInfo]]: