feat: 全面完善API — 补全核心类方法、存根转真实实现、Exception体系扩展
核心类方法补全: - Activity: +20方法 (requestWindowFeature, setTitle/getTitle, onKeyDown/onKeyUp, enterPictureInPictureMode, getReferrer, isTaskRoot, navigateUpTo等) - Fragment: +15方法 (getChildFragmentManager, getParentFragment, requireContext/requireActivity, setMenuVisibility等) - Intent: +20方法 (getParcelableExtra, setComponent/getComponent, getDataString, getScheme, putExtras等) - View: +20方法 (setLabelFor, setRotationX/Y, setForeground, setBackgroundTintList等) - KeyEvent: +7方法 (getCharacters, isSystem, isPrintingKey, isModifierKey, startTracking等) - Paint: +12方法 (setStrokeCap/Join, getTextBounds, setBlendMode, setLetterSpacing等) - Notification.Builder: +10方法 (setProgress, setShowWhen, setOnlyAlertOnce, setSound等) 存根转真实实现: - TrafficStats: 读取 /proc/net/dev 返回真实网络流量 - RecyclerView.Adapter: 观察者模式触发通知 - BaseAdapter: 观察者模式触发通知 - ExifInterface: 使用PIL实现图片翻转/旋转 - Process: 使用os.kill实现进程信号 - FileUtils: 真实文件I/O - SharedPreferences: 监听器模式 - TelephonyManager.listen: 维护监听器列表 - ScrollView.smoothScrollTo: 更新滚动位置 Exception体系扩展: - 新增15个Exception/Error类 (ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchElementException, AssertionError, OutOfMemoryError, StackOverflowError, NoClassDefFoundError, UnsatisfiedLinkError, LinkageError, VerifyError, AbstractMethodError, IncompatibleClassChangeError, ExceptionInInitializerError) Math/System/Thread/StringBuilder/Integer增强: - Math: +20方法 (subtractExact, multiplyExact, toIntExact, floorDiv/floorMod, fma等) - System: getProperties/setProperties/mapLibraryName/getLogger - Thread: +10方法 (getUncaughtExceptionHandler, getAllStackTraces, getStackTrace, holdLock等) - StringBuilder: +7方法 (ensureCapacity, trimToSize, setLength, subSequence等) - Integer: +8静态方法 (compare, compareUnsigned, divideUnsigned, sum, max, min等) 修复: - app_fragment.py: 使用java.lang.IllegalStateException替代本地定义 - content_intent.py: Intent.setData/getScheme正确从Uri提取scheme - view_ext.py: KeyEvent继承view.KeyEvent获取所有KEYCODE常量 - __init__.py: 补全Fragment/KeyEvent/MotionEvent/TrafficStats/RecyclerView等导出 统计: 221模块, 3660类, 30826方法, 180217行
This commit is contained in:
1 parent
e316e18d98
commit
39b1da37c9
16 files changed
+1274
-107
No files matched your search
@@ -1079,53 +1079,98 @@ class TrafficStats(Stub):
|
||||
UNSUPPORTED = -1
|
||||
TAG_SYSTEM_UPDATE = 0
|
||||
|
||||
_cached_stats = None
|
||||
_cache_time = 0
|
||||
|
||||
@staticmethod
|
||||
def getMobileTxBytes() -> int:
|
||||
def _read_net_dev():
|
||||
"""读取 /proc/net/dev 获取网络流量"""
|
||||
try:
|
||||
with open("/proc/net/dev", "r") as f:
|
||||
lines = f.readlines()[2:] # 跳过前两行表头
|
||||
total_rx = 0
|
||||
total_tx = 0
|
||||
for line in lines:
|
||||
parts = line.split()
|
||||
ifname = parts[0].rstrip(":")
|
||||
if ifname == "lo":
|
||||
continue
|
||||
rx_bytes = int(parts[1])
|
||||
tx_bytes = int(parts[9])
|
||||
total_rx += rx_bytes
|
||||
total_tx += tx_bytes
|
||||
return {"rx_bytes": total_rx, "tx_bytes": total_tx,
|
||||
"rx_packets": 0, "tx_packets": 0}
|
||||
except Exception:
|
||||
return {"rx_bytes": 0, "tx_bytes": 0, "rx_packets": 0, "tx_packets": 0}
|
||||
|
||||
@staticmethod
|
||||
def getMobileRxBytes():
|
||||
return 0 # 桌面无移动数据
|
||||
|
||||
@staticmethod
|
||||
def getMobileTxBytes():
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def getMobileRxBytes() -> int:
|
||||
def getMobileRxPackets():
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def getTotalTxBytes() -> int:
|
||||
def getMobileTxPackets():
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def getTotalRxBytes() -> int:
|
||||
return 0
|
||||
def getTotalRxBytes():
|
||||
return TrafficStats._read_net_dev()["rx_bytes"]
|
||||
|
||||
@staticmethod
|
||||
def getMobileTxPackets() -> int:
|
||||
return 0
|
||||
def getTotalTxBytes():
|
||||
return TrafficStats._read_net_dev()["tx_bytes"]
|
||||
|
||||
@staticmethod
|
||||
def getMobileRxPackets() -> int:
|
||||
return 0
|
||||
def getTotalRxPackets():
|
||||
return TrafficStats._read_net_dev()["rx_packets"]
|
||||
|
||||
@staticmethod
|
||||
def getTotalTxPackets() -> int:
|
||||
return 0
|
||||
def getTotalTxPackets():
|
||||
return TrafficStats._read_net_dev()["tx_packets"]
|
||||
|
||||
@staticmethod
|
||||
def getTotalRxPackets() -> int:
|
||||
return 0
|
||||
def getUidRxBytes(uid):
|
||||
try:
|
||||
with open(f"/proc/uid_stat/{uid}/tcp_rcv", "r") as f:
|
||||
return int(f.read().strip())
|
||||
except Exception:
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def getUidTxBytes(uid: int) -> int:
|
||||
return 0
|
||||
def getUidTxBytes(uid):
|
||||
try:
|
||||
with open(f"/proc/uid_stat/{uid}/tcp_snd", "r") as f:
|
||||
return int(f.read().strip())
|
||||
except Exception:
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def getUidRxBytes(uid: int) -> int:
|
||||
return 0
|
||||
def getUidRxPackets(uid):
|
||||
return TrafficStats.getUidRxBytes(uid)
|
||||
|
||||
@staticmethod
|
||||
def getUidTxPackets(uid: int) -> int:
|
||||
return 0
|
||||
def getUidTxPackets(uid):
|
||||
return TrafficStats.getUidTxBytes(uid)
|
||||
|
||||
@staticmethod
|
||||
def getUidRxPackets(uid: int) -> int:
|
||||
return 0
|
||||
def getThreadStatsTag():
|
||||
return getattr(TrafficStats, '_thread_tag', 0)
|
||||
|
||||
@staticmethod
|
||||
def setThreadStatsTag(tag):
|
||||
TrafficStats._thread_tag = tag
|
||||
|
||||
@staticmethod
|
||||
def clearThreadStatsTag():
|
||||
TrafficStats._thread_tag = 0
|
||||
|
||||
@staticmethod
|
||||
def getUidTcpTxBytes(uid: int) -> int:
|
||||
@@ -1143,18 +1188,6 @@ class TrafficStats(Stub):
|
||||
def getUidUdpRxBytes(uid: int) -> int:
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def setThreadStatsTag(tag: int):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def clearThreadStatsTag():
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def getThreadStatsTag() -> int:
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def setThreadStatsUid(uid: int):
|
||||
pass
|
||||
|
||||
Reference in new issue
Block a user