- android/ 167个模块 (app/content/os/view/widget/graphics/media/hardware/net/telephony/provider等) - java/ 35个模块 (lang/io/util/net/nio/security/crypto/sql/beans/rmi/awt等) - javax/ 4个模块 (net/crypto/security/sql) - org/ 5个模块 (json/w3c_dom/xml_sax/xml_pull/apache_http) - dalvik/ 1个模块 (system) - ~3053个类/接口,方法签名完全对齐Android SDK - 桌面跨平台运行 (Windows/macOS/Linux) - 修复所有导入错误和Python关键字冲突
215 lines
8.3 KiB
Python
215 lines
8.3 KiB
Python
"""
|
|
Android os.health 组件 — HealthStats, HealthStatsWriter, UidHealthStats 等
|
|
方法签名完全对齐 Android SDK
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from .._core import Stub, AndroidOnlyError
|
|
from ..java.lang import RuntimeException
|
|
|
|
|
|
IllegalArgumentException = type("IllegalArgumentException", (RuntimeException,), {})
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# UidHealthStats
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class UidHealthStats(Stub):
|
|
"""UidHealthStats — UID 健康统计常量"""
|
|
|
|
STATISTICS_SORTED_KEYS_COUNT = 0x10001
|
|
|
|
MEASUREMENT_REALTIME_BATTERY_MS = 0x20001
|
|
MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS = 0x20002
|
|
MEASUREMENT_FOREGROUND_APP_MS = 0x20003
|
|
MEASUREMENT_BACKGROUND_PIDS_MEASUREMENT = 0x20004
|
|
MEASUREMENT_REALTIME_BATTERY_MS_UNPLUGGED = 0x20005
|
|
MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS_UNPLUGGED = 0x20006
|
|
|
|
TIMER_FLASHLIGHT = 0x30001
|
|
TIMER_CAMERA = 0x30002
|
|
TIMER_VIDEO = 0x30003
|
|
TIMER_AUDIO = 0x30004
|
|
TIMER_WIFI = 0x30005
|
|
TIMER_BLUETOOTH = 0x30006
|
|
TIMER_GPS = 0x30007
|
|
TIMER_SENSORS = 0x30008
|
|
TIMER_MOBILE_RADIO_ACTIVE = 0x30009
|
|
TIMER_PARTIAL_WAKELOCK = 0x3000A
|
|
TIMER_WIFI_SCAN = 0x3000B
|
|
TIMER_WIFI_FULL_LOCK = 0x3000C
|
|
TIMER_WIFI_MULTICAST = 0x3000D
|
|
TIMER_WIFI_RADIO_ACTIVE = 0x3000E
|
|
TIMER_AUDIO_JACK = 0x3000F
|
|
TIMER_VIDEO_GPS = 0x30010
|
|
TIMER_VIDEO_TURBO = 0x30011
|
|
TIMER_VIDEO_LOCK = 0x30012
|
|
|
|
TIMER_OVERCOUNT = 0x40001
|
|
|
|
MEASUREMENT_OTHER_USER_ACTIVITY_COUNT = 0x50001
|
|
MEASUREMENT_BLUETOOTH_ACTIVITY_COUNT = 0x50002
|
|
MEASUREMENT_WIFI_ACTIVITY_COUNT = 0x50003
|
|
MEASUREMENT_MOBILE_RADIO_ACTIVITY_COUNT = 0x50004
|
|
|
|
TIMER_WIFI_RADIO_ACTIVITY = 0x60001
|
|
TIMER_BLUETOOTH_RADIO_ACTIVITY = 0x60002
|
|
TIMER_MOBILE_RADIO_ACTIVITY = 0x60003
|
|
|
|
MEASUREMENT_WIFI_IDLE_MS = 0x70001
|
|
MEASUREMENT_WIFI_RX_MS = 0x70002
|
|
MEASUREMENT_WIFI_TX_MS = 0x70003
|
|
MEASUREMENT_BLUETOOTH_IDLE_MS = 0x70004
|
|
MEASUREMENT_BLUETOOTH_RX_MS = 0x70005
|
|
MEASUREMENT_BLUETOOTH_TX_MS = 0x70006
|
|
MEASUREMENT_MOBILE_RADIO_IDLE_MS = 0x70007
|
|
MEASUREMENT_MOBILE_RADIO_RX_MS = 0x70008
|
|
MEASUREMENT_MOBILE_RADIO_TX_MS = 0x70009
|
|
|
|
TIMER_WIFI_RADIO_SCAN = 0x80001
|
|
TIMER_BLUETOOTH_RADIO_SCAN = 0x80002
|
|
TIMER_MOBILE_RADIO_SCAN = 0x80003
|
|
|
|
MEASUREMENT_WIFI_RADIO_ACTIVE_MS = 0x90001
|
|
MEASUREMENT_BLUETOOTH_RADIO_ACTIVE_MS = 0x90002
|
|
MEASUREMENT_MOBILE_RADIO_ACTIVE_MS = 0x90003
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PidHealthStats
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class PidHealthStats(Stub):
|
|
"""PidHealthStats — 进程健康统计常量"""
|
|
|
|
MEASUREMENT_WAKE_NESTING_COUNT = 0x20001
|
|
MEASUREMENT_WAKE_SUM_MS = 0x20002
|
|
MEASUREMENT_WAKE_START_MS = 0x20003
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# ProcessHealthStats
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class ProcessHealthStats(Stub):
|
|
"""ProcessHealthStats — 进程健康统计常量"""
|
|
|
|
MEASUREMENT_USER_TIME_MS = 0x20001
|
|
MEASUREMENT_SYSTEM_TIME_MS = 0x20002
|
|
MEASUREMENT_STARTS_COUNT = 0x20003
|
|
MEASUREMENT_CRASHES_COUNT = 0x20004
|
|
MEASUREMENT_ANR_COUNT = 0x20005
|
|
MEASUREMENT_FOREGROUND_MS = 0x20006
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PackageHealthStats
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class PackageHealthStats(Stub):
|
|
"""PackageHealthStats — 包健康统计常量"""
|
|
|
|
STATISTICS_SORTED_BY_TYPE = 0x10001
|
|
MEASUREMENTS_WAKEUP_ALARMS_COUNT = 0x20001
|
|
TIMERS_SERVICES = 0x30001
|
|
STATISTICS_SERVICES = 0x40001
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# ServiceHealthStats
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class ServiceHealthStats(Stub):
|
|
"""ServiceHealthStats — 服务健康统计常量"""
|
|
|
|
MEASUREMENT_START_SERVICE_COUNT = 0x20001
|
|
MEASUREMENT_LAUNCH_COUNT = 0x20002
|
|
MEASUREMENT_CRASH_COUNT = 0x20003
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# HealthStats
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class HealthStats(Stub):
|
|
"""HealthStats — 健康统计数据"""
|
|
|
|
def __init__(self, data: Optional[Dict[int, Any]] = None):
|
|
super().__init__()
|
|
self._data: Dict[int, Any] = data or {}
|
|
|
|
def getMeasurement(self, key: int) -> int:
|
|
return self._data.get(key, 0)
|
|
|
|
def getTimer(self, key: int) -> Any:
|
|
return self._data.get(key)
|
|
|
|
def getTimers(self, key: int) -> List[Any]:
|
|
return self._data.get(key, [])
|
|
|
|
def getStats(self, key: int) -> "HealthStats":
|
|
return self._data.get(key, HealthStats())
|
|
|
|
def getStatsArray(self, key: int) -> List["HealthStats"]:
|
|
return self._data.get(key, [])
|
|
|
|
def hasKey(self, key: int) -> bool:
|
|
return key in self._data
|
|
|
|
def getKeys(self) -> List[int]:
|
|
return list(self._data.keys())
|
|
|
|
def toString(self) -> str:
|
|
return f"HealthStats{{{len(self._data)} entries}}"
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# HealthStatsWriter
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
class HealthStatsWriter(Stub):
|
|
"""HealthStatsWriter — 健康统计写入器"""
|
|
|
|
def __init__(self, keys: Optional[List[int]] = None):
|
|
super().__init__()
|
|
self._data: Dict[int, Any] = {}
|
|
|
|
def addMeasurement(self, key: int, value: int):
|
|
self._data[key] = value
|
|
|
|
def addTimer(self, key: int, count: int, time_ms: int):
|
|
self._data[key] = (count, time_ms)
|
|
|
|
def addTimers(self, key: int, values: List[Any]):
|
|
self._data[key] = values
|
|
|
|
def addStats(self, key: int, value: HealthStats):
|
|
self._data[key] = value
|
|
|
|
def addStatsArray(self, key: int, values: List[HealthStats]):
|
|
self._data[key] = values
|
|
|
|
def toHealthStats(self) -> HealthStats:
|
|
return HealthStats(dict(self._data))
|
|
|
|
def toString(self) -> str:
|
|
return f"HealthStatsWriter@{hex(id(self))}"
|
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# __all__
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
__all__ = [
|
|
"HealthStats",
|
|
"HealthStatsWriter",
|
|
"UidHealthStats",
|
|
"PidHealthStats",
|
|
"ProcessHealthStats",
|
|
"PackageHealthStats",
|
|
"ServiceHealthStats",
|
|
] |