新增模块覆盖: 系统层 (14): system, security, print, opengl, renderscript, transition, test, service_notification, service_controls, service_quicksettings, service_wallpaper, service_autofill, service_dreams, service_vr 应用层 (13): app_admin, app_backup, app_job, app_usage, app_role, app_people, appwidget, companion, credentials, mtp, sip, telecom, speech 硬件媒体层 (15): hardware_display, hardware_fingerprint, hardware_usb, hardware_input, media_audiofx, media_browse, media_session, media_tv, media_midi, media_projection, uwb, se, view_autofill, view_textclassifier, view_translation 总计 94 个模块,75,342 行代码
380 lines
10 KiB
Python
380 lines
10 KiB
Python
"""
|
|
Android-pyApi — Android API 全面 Python 翻译
|
|
==============================================
|
|
方法签名完全对齐 Android SDK,跨平台运行于 Windows/macOS/Linux。
|
|
|
|
用法:
|
|
from android_pyapi import Intent, Context, Uri, Bitmap, View
|
|
from android_pyapi.java.io import File, FileInputStream
|
|
from android_pyapi.java.util import ArrayList, HashMap
|
|
from android_pyapi.org.json import JSONObject, JSONArray
|
|
|
|
设计原则:
|
|
1. 方法名、参数名、返回类型完全对齐 Android SDK
|
|
2. 能桌面实现的 → 真实实现 (基于 PIL/sqlite3/socket 等)
|
|
3. 无法桌面实现的 → 返回合理默认值或抛出 AndroidOnlyError
|
|
4. 所有常量值与 Android SDK 一致
|
|
"""
|
|
|
|
from ._core import (
|
|
AndroidOnlyError,
|
|
Stub,
|
|
android_context,
|
|
get_context,
|
|
_sdcard_root,
|
|
_app_data_dir,
|
|
_package_name,
|
|
)
|
|
|
|
# android.* 包
|
|
from .android.app import *
|
|
from .android.content import *
|
|
from .android.content_pm import *
|
|
from .android.os import *
|
|
from .android.view import *
|
|
from .android.view_accessibility import *
|
|
from .android.view_animation import *
|
|
from .android.view_inputmethod import *
|
|
from .android.widget import *
|
|
from .android.graphics import *
|
|
from .android.graphics_drawable import *
|
|
from .android.graphics_pdf import *
|
|
from .android.net import *
|
|
from .android.net_wifi import *
|
|
from .android.media import *
|
|
from .android.hardware import *
|
|
from .android.hardware_camera2 import *
|
|
from .android.hardware_biometrics import *
|
|
from .android.location import *
|
|
from .android.database import *
|
|
from .android.database_sqlite import *
|
|
from .android.provider import *
|
|
from .android.telephony import *
|
|
from .android.bluetooth import *
|
|
from .android.bluetooth_le import *
|
|
from .android.text import *
|
|
from .android.util import *
|
|
from .android.preference import *
|
|
from .android.webkit import *
|
|
from .android.nfc import *
|
|
from .android.speech_tts import *
|
|
from .android.inputmethod import *
|
|
from .android.app_admin import *
|
|
from .android.app_backup import *
|
|
from .android.app_job import *
|
|
from .android.app_people import *
|
|
from .android.app_role import *
|
|
from .android.app_usage import *
|
|
from .android.appwidget import *
|
|
from .android.companion import *
|
|
from .android.credentials import *
|
|
from .android.hardware_display import *
|
|
from .android.hardware_fingerprint import *
|
|
from .android.hardware_input import *
|
|
from .android.hardware_usb import *
|
|
from .android.media_audiofx import *
|
|
from .android.media_browse import *
|
|
from .android.media_midi import *
|
|
from .android.media_projection import *
|
|
from .android.media_session import *
|
|
from .android.media_tv import *
|
|
from .android.mtp import *
|
|
from .android.opengl import *
|
|
from .android.print import *
|
|
from .android.renderscript import *
|
|
from .android.se import *
|
|
from .android.security import *
|
|
from .android.service_autofill import *
|
|
from .android.service_controls import *
|
|
from .android.service_dreams import *
|
|
from .android.service_notification import *
|
|
from .android.service_quicksettings import *
|
|
from .android.service_vr import *
|
|
from .android.service_wallpaper import *
|
|
from .android.sip import *
|
|
from .android.speech import *
|
|
from .android.system import *
|
|
from .android.telecom import *
|
|
from .android.test import *
|
|
from .android.transition import *
|
|
from .android.uwb import *
|
|
from .android.view_autofill import *
|
|
from .android.view_textclassifier import *
|
|
from .android.view_translation import *
|
|
|
|
# java.* 包
|
|
from .java.io import *
|
|
from .java.net import *
|
|
from .java.util import *
|
|
from .java.util_regex import *
|
|
from .java.util_zip import *
|
|
from .java.util_concurrent import *
|
|
from .java.lang import *
|
|
from .java.math import *
|
|
from .java.text import *
|
|
from .java.time import *
|
|
from .java.nio import *
|
|
from .java.nio_file import *
|
|
from .java.security import *
|
|
from .java.crypto import *
|
|
|
|
# org.* 包
|
|
from .org.json import *
|
|
|
|
# Base64 (标准 Android API)
|
|
import base64 as _base64
|
|
|
|
class Base64:
|
|
DEFAULT = 0
|
|
NO_PADDING = 1
|
|
NO_WRAP = 2
|
|
CRLF = 4
|
|
URL_SAFE = 8
|
|
NO_CLOSE = 16
|
|
|
|
@staticmethod
|
|
def encodeToString(input_data, flags=0):
|
|
if isinstance(input_data, str):
|
|
input_data = input_data.encode('utf-8')
|
|
return _base64.b64encode(input_data).decode('ascii')
|
|
|
|
@staticmethod
|
|
def decode(str_val, flags=0):
|
|
return _base64.b64decode(str_val)
|
|
|
|
@staticmethod
|
|
def encode(input_data, flags=0):
|
|
if isinstance(input_data, str):
|
|
input_data = input_data.encode('utf-8')
|
|
return _base64.b64encode(input_data)
|
|
|
|
# Scanner (java.util)
|
|
class Scanner:
|
|
def __init__(self, source):
|
|
if isinstance(source, str):
|
|
self._source = source
|
|
else:
|
|
self._source = str(source)
|
|
self._pos = 0
|
|
|
|
def next(self):
|
|
while self._pos < len(self._source) and self._source[self._pos].isspace():
|
|
self._pos += 1
|
|
start = self._pos
|
|
while self._pos < len(self._source) and not self._source[self._pos].isspace():
|
|
self._pos += 1
|
|
if start == self._pos:
|
|
raise Exception("NoSuchElementException")
|
|
return self._source[start:self._pos]
|
|
|
|
def hasNext(self):
|
|
pos = self._pos
|
|
while pos < len(self._source) and self._source[pos].isspace():
|
|
pos += 1
|
|
return pos < len(self._source)
|
|
|
|
def nextInt(self):
|
|
return int(self.next())
|
|
|
|
def close(self):
|
|
pass
|
|
|
|
# Timer (java.util)
|
|
class Timer:
|
|
def __init__(self, name=None, daemon=False):
|
|
import threading
|
|
self._thread = None
|
|
self._tasks = []
|
|
|
|
def schedule(self, task, delay=None, period=None):
|
|
import threading
|
|
if delay is None:
|
|
self._run_once(task)
|
|
elif period is None:
|
|
self._run_delayed(task, delay)
|
|
else:
|
|
self._run_periodic(task, delay, period)
|
|
|
|
def _run_once(self, task):
|
|
t = threading.Thread(target=task.run)
|
|
t.daemon = True
|
|
self._tasks.append(t)
|
|
t.start()
|
|
|
|
def _run_delayed(self, task, delay_ms):
|
|
import threading
|
|
def _run():
|
|
import time
|
|
time.sleep(delay_ms / 1000.0)
|
|
task.run()
|
|
t = threading.Thread(target=_run)
|
|
t.daemon = True
|
|
self._tasks.append(t)
|
|
t.start()
|
|
|
|
def _run_periodic(self, task, delay_ms, period_ms):
|
|
import threading
|
|
def _run():
|
|
import time
|
|
time.sleep(delay_ms / 1000.0)
|
|
while True:
|
|
task.run()
|
|
time.sleep(period_ms / 1000.0)
|
|
t = threading.Thread(target=_run)
|
|
t.daemon = True
|
|
self._tasks.append(t)
|
|
t.start()
|
|
|
|
def cancel(self):
|
|
pass
|
|
|
|
def purge(self):
|
|
return 0
|
|
|
|
|
|
class TimerTask:
|
|
def __init__(self):
|
|
self._cancelled = False
|
|
|
|
def run(self):
|
|
pass
|
|
|
|
def cancel(self):
|
|
self._cancelled = True
|
|
|
|
def scheduledExecutionTime(self):
|
|
return 0
|
|
|
|
__version__ = "1.0.0"
|
|
__all__ = [
|
|
# android
|
|
"AccessibilityNodeInfo", "AccessibilityService",
|
|
"ActivityManager",
|
|
"AlphaAnimation",
|
|
"Animation",
|
|
"AppWidgetManager", "AppWidgetProvider", "AppWidgetProviderInfo",
|
|
"AudioManager",
|
|
"AutofillManager", "AutofillValue",
|
|
"BackupAgent", "BackupManager",
|
|
"Base64",
|
|
"BatteryManager",
|
|
"BiometricPrompt",
|
|
"Bitmap", "BitmapDrawable", "BitmapFactory",
|
|
"BluetoothAdapter", "BluetoothDevice",
|
|
"BroadcastReceiver",
|
|
"Build",
|
|
"Bundle",
|
|
"Button",
|
|
"CalendarContract",
|
|
"Call",
|
|
"CameraManager",
|
|
"Canvas",
|
|
"CheckBox",
|
|
"Color",
|
|
"CompanionDeviceManager",
|
|
"ConnectivityManager",
|
|
"ContentResolver",
|
|
"ContentValues",
|
|
"ContactsContract",
|
|
"Context",
|
|
"CredentialManager",
|
|
"Cursor",
|
|
"DevicePolicyManager",
|
|
"DisplayManager",
|
|
"Drawable",
|
|
"EditText",
|
|
"Environment",
|
|
"FingerprintManager",
|
|
"Geocoder",
|
|
"Handler",
|
|
"Html",
|
|
"ImageView",
|
|
"InputDevice",
|
|
"InputManager",
|
|
"InputMethodManager",
|
|
"Intent",
|
|
"IntentFilter",
|
|
"JobInfo", "JobScheduler", "JobService",
|
|
"KeyChain",
|
|
"ListView",
|
|
"Location",
|
|
"LocationManager",
|
|
"Log",
|
|
"Looper",
|
|
"Matrix",
|
|
"MediaBrowser", "MediaController",
|
|
"MediaPlayer",
|
|
"MediaProjectionManager",
|
|
"MediaRecorder",
|
|
"MediaSession",
|
|
"MediaStore",
|
|
"Message",
|
|
"MidiDevice", "MidiManager",
|
|
"MtpDevice",
|
|
"NetworkInfo",
|
|
"Os", "OsConstants",
|
|
"PackageInfo", "PackageManager",
|
|
"Paint",
|
|
"PdfRenderer",
|
|
"PeopleManager",
|
|
"PowerManager",
|
|
"PrintAttributes", "PrintDocumentAdapter", "PrintManager",
|
|
"ProgressBar",
|
|
"Rect", "RectF",
|
|
"RoleManager",
|
|
"ScrollView",
|
|
"SensorManager",
|
|
"Settings",
|
|
"SharedPreferences",
|
|
"SmsManager",
|
|
"SpannableString",
|
|
"SpeechRecognizer",
|
|
"Spinner",
|
|
"SQLiteDatabase", "SQLiteOpenHelper",
|
|
"StructStat",
|
|
"Switch",
|
|
"TelecomManager",
|
|
"TelephonyManager",
|
|
"TextClassifier",
|
|
"TextToSpeech",
|
|
"TextUtils",
|
|
"TextView",
|
|
"Toast",
|
|
"TranslateAnimation",
|
|
"TranslationManager",
|
|
"TvInputManager",
|
|
"Typeface",
|
|
"TypedValue",
|
|
"Uri",
|
|
"UsageStatsManager",
|
|
"UsbDevice", "UsbManager",
|
|
"UwbManager",
|
|
"View", "ViewGroup",
|
|
"VirtualDisplay",
|
|
"WebView",
|
|
"WifiManager",
|
|
# java
|
|
"File", "FileInputStream", "FileOutputStream",
|
|
"BufferedReader", "BufferedWriter",
|
|
"InputStreamReader", "OutputStreamWriter",
|
|
"URL", "HttpURLConnection", "Socket", "ServerSocket",
|
|
"ArrayList", "HashMap", "HashSet", "LinkedList",
|
|
"Collections", "Arrays", "Calendar", "Date", "Random",
|
|
"UUID", "Scanner", "Timer", "TimerTask",
|
|
"Pattern", "Matcher",
|
|
"ZipFile", "GZIPInputStream", "GZIPOutputStream",
|
|
"ExecutorService", "Executors", "Future", "Callable",
|
|
"String", "StringBuilder", "StringBuffer",
|
|
"Integer", "Math", "System", "Thread",
|
|
"BigInteger", "BigDecimal",
|
|
"SimpleDateFormat", "DecimalFormat",
|
|
"LocalDateTime", "LocalDate", "LocalTime", "Instant", "Duration", "Period",
|
|
"ChronoUnit", "ChronoField", "DayOfWeek", "Month", "ZoneId", "ZoneOffset",
|
|
"DateTimeFormatter",
|
|
"ByteBuffer", "Files", "Path", "Paths",
|
|
"MessageDigest", "SecureRandom",
|
|
"Cipher", "Mac", "KeyGenerator",
|
|
# org
|
|
"JSONObject", "JSONArray", "JSONException",
|
|
]
|