- 测试 android.os 模块 (Build, SystemClock, Environment, Process, Bundle, BatteryManager, PowerManager, Vibrator, PatternMatcher, FileUtils) - 测试 android.content 模块 (Uri, ContentValues, Context, SharedPreferences, ComponentName, ClipData, ClipboardManager) - 测试 android.app 模块 (Intent, Notification, NotificationManager, AlarmManager) - 测试 android.graphics 模块 (Color, Bitmap, Paint, Rect) - 测试 java 模块 (String, StringBuilder, Integer, Math, ArrayList, HashMap, JSONObject, File) - 所有测试通过
400 lines
13 KiB
Python
400 lines
13 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
扩展 Android API 测试脚本
|
|
测试 android.os, android.content, android.app, android.widget, android.graphics 等模块
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
def test_os_module():
|
|
"""测试 android.os 模块"""
|
|
print("\n" + "=" * 60)
|
|
print("android.os 模块测试")
|
|
print("=" * 60)
|
|
|
|
from android_pyapi.android.os import (
|
|
Build, SystemClock, Environment, Process,
|
|
Bundle, Handler, Looper, Message,
|
|
BatteryManager, PowerManager, Vibrator,
|
|
AsyncTask, CountDownTimer, Messenger,
|
|
FileObserver, FileUtils, PatternMatcher,
|
|
)
|
|
|
|
# Build 测试
|
|
print("\n[Build 设备信息]")
|
|
print(f" MODEL: {Build.MODEL}")
|
|
print(f" MANUFACTURER: {Build.MANUFACTURER}")
|
|
print(f" BRAND: {Build.BRAND}")
|
|
print(f" DEVICE: {Build.DEVICE}")
|
|
print(f" FINGERPRINT: {Build.FINGERPRINT}")
|
|
print(f" SDK_INT: {Build.VERSION.SDK_INT}")
|
|
print(f" RELEASE: {Build.VERSION.RELEASE}")
|
|
|
|
# SystemClock 测试
|
|
print("\n[SystemClock 系统时钟]")
|
|
print(f" 启动时间: {SystemClock.elapsedRealtime()} ms")
|
|
print(f" 运行时间: {SystemClock.uptimeMillis()} ms")
|
|
|
|
# Environment 测试
|
|
print("\n[Environment 环境目录]")
|
|
print(f" 外部存储: {Environment.getExternalStorageDirectory()}")
|
|
print(f" 下载目录: {Environment.getExternalStoragePublicDirectory('Download')}")
|
|
print(f" 数据目录: {Environment.getDataDirectory()}")
|
|
print(f" 根目录: {Environment.getRootDirectory()}")
|
|
|
|
# Process 测试
|
|
print("\n[Process 进程信息]")
|
|
print(f" PID: {Process.myPid()}")
|
|
print(f" TID: {Process.myTid()}")
|
|
|
|
# Bundle 测试
|
|
print("\n[Bundle 数据容器]")
|
|
bundle = Bundle()
|
|
bundle.putString("name", "Android-pyApi")
|
|
bundle.putInt("version", 100)
|
|
bundle.putBoolean("windows", True)
|
|
print(f" name: {bundle.getString('name')}")
|
|
print(f" version: {bundle.getInt('version')}")
|
|
print(f" windows: {bundle.getBoolean('windows')}")
|
|
print(f" size: {bundle.size()}")
|
|
|
|
# BatteryManager 测试
|
|
print("\n[BatteryManager 电池管理]")
|
|
bm = BatteryManager()
|
|
print(f" 电量: {bm.getLevel()}%")
|
|
print(f" 充电: {bm.isCharging()}")
|
|
print(f" 存在: {bm.isPresent()}")
|
|
print(f" 技术: {bm.getTechnology()}")
|
|
|
|
# PowerManager 测试
|
|
print("\n[PowerManager 电源管理]")
|
|
pm = PowerManager()
|
|
print(f" 交互: {pm.isInteractive()}")
|
|
print(f" 屏幕: {pm.isScreenOn()}")
|
|
|
|
# Vibrator 测试
|
|
print("\n[Vibrator 振动器]")
|
|
vib = Vibrator()
|
|
print(f" 有振动器: {vib.hasVibrator()}")
|
|
|
|
# PatternMatcher 测试
|
|
print("\n[PatternMatcher 模式匹配]")
|
|
pm_literal = PatternMatcher("/sdcard/test.txt", PatternMatcher.PATTERN_LITERAL)
|
|
pm_prefix = PatternMatcher("/sdcard/", PatternMatcher.PATTERN_PREFIX)
|
|
print(f" literal match: {pm_literal.match('/sdcard/test.txt')}")
|
|
print(f" prefix match: {pm_prefix.match('/sdcard/test.txt')}")
|
|
|
|
# FileUtils 测试
|
|
print("\n[FileUtils 文件工具]")
|
|
test_file = os.path.join(os.environ.get('TEMP', '/tmp'), 'android_pyapi_test.txt')
|
|
FileUtils.stringToFile(test_file, "Hello, Android-pyApi!")
|
|
content = FileUtils.readFileToString(test_file)
|
|
print(f" 写入读取: {content}")
|
|
os.remove(test_file)
|
|
|
|
|
|
def test_content_module():
|
|
"""测试 android.content 模块"""
|
|
print("\n" + "=" * 60)
|
|
print("android.content 模块测试")
|
|
print("=" * 60)
|
|
|
|
from android_pyapi.android.content import (
|
|
Uri, ContentValues, ContentResolver, Context,
|
|
SharedPreferences, IntentFilter, BroadcastReceiver,
|
|
ComponentName, ClipData, ClipDescription,
|
|
ContentProvider, ContentProviderClient,
|
|
ClipboardManager,
|
|
)
|
|
|
|
# Uri 测试
|
|
print("\n[Uri 统一资源标识符]")
|
|
uri = Uri.parse("https://example.com/path?query=1&foo=bar#fragment")
|
|
print(f" scheme: {uri.getScheme()}")
|
|
print(f" host: {uri.getHost()}")
|
|
print(f" path: {uri.getPath()}")
|
|
print(f" query: {uri.getQuery()}")
|
|
print(f" fragment: {uri.getFragment()}")
|
|
print(f" toString: {uri.toString()}")
|
|
|
|
# ContentValues 测试
|
|
print("\n[ContentValues 内容值]")
|
|
cv = ContentValues()
|
|
cv.put("title", "Test")
|
|
cv.put("value", 42)
|
|
cv.put("flag", True)
|
|
print(f" title: {cv.getAsString('title')}")
|
|
print(f" value: {cv.getAsInteger('value')}")
|
|
print(f" flag: {cv.getAsBoolean('flag')}")
|
|
print(f" size: {cv.size()}")
|
|
|
|
# Context 测试
|
|
print("\n[Context 应用上下文]")
|
|
ctx = Context()
|
|
print(f" packageName: {ctx.getPackageName()}")
|
|
print(f" filesDir: {ctx.getFilesDir()}")
|
|
print(f" cacheDir: {ctx.getCacheDir()}")
|
|
print(f" dataDir: {ctx.getDataDir()}")
|
|
|
|
# SharedPreferences 测试
|
|
print("\n[SharedPreferences 持久化存储]")
|
|
sp = ctx.getSharedPreferences("test_prefs")
|
|
editor = sp.edit()
|
|
editor.putString("username", "test_user")
|
|
editor.putInt("login_count", 5)
|
|
editor.putBoolean("remember", True)
|
|
editor.commit()
|
|
print(f" username: {sp.getString('username')}")
|
|
print(f" login_count: {sp.getInt('login_count')}")
|
|
print(f" remember: {sp.getBoolean('remember')}")
|
|
|
|
# ComponentName 测试
|
|
print("\n[ComponentName 组件名]")
|
|
cn = ComponentName("com.example.app", "com.example.app.MainActivity")
|
|
print(f" package: {cn.getPackageName()}")
|
|
print(f" class: {cn.getClassName()}")
|
|
print(f" short: {cn.getShortClassName()}")
|
|
print(f" flatten: {cn.flattenToString()}")
|
|
|
|
# ClipData 测试
|
|
print("\n[ClipData 剪贴板数据]")
|
|
clip = ClipData.newPlainText("label", "Hello, Clipboard!")
|
|
item = clip.getItemAt(0)
|
|
print(f" text: {item.getText()}")
|
|
print(f" itemCount: {clip.getItemCount()}")
|
|
|
|
# ClipboardManager 测试
|
|
print("\n[ClipboardManager 剪贴板管理]")
|
|
cm = ClipboardManager()
|
|
cm.setText("Test Clipboard")
|
|
print(f" getText: {cm.getText()}")
|
|
print(f" hasText: {cm.hasText()}")
|
|
|
|
|
|
def test_app_module():
|
|
"""测试 android.app 模块"""
|
|
print("\n" + "=" * 60)
|
|
print("android.app 模块测试")
|
|
print("=" * 60)
|
|
|
|
from android_pyapi.android.app import (
|
|
Intent, Activity, Service,
|
|
Notification, NotificationManager,
|
|
AlarmManager, ActivityManager,
|
|
)
|
|
|
|
# Intent 测试
|
|
print("\n[Intent 意图]")
|
|
intent = Intent(Intent.ACTION_VIEW)
|
|
intent.setData("https://example.com")
|
|
intent.putExtra("title", "Test")
|
|
intent.putExtra("count", 42)
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
print(f" action: {intent.getAction()}")
|
|
print(f" data: {intent.getData()}")
|
|
print(f" title: {intent.getStringExtra('title')}")
|
|
print(f" count: {intent.getIntExtra('count')}")
|
|
print(f" flags: {hex(intent.getFlags())}")
|
|
|
|
# Notification 测试
|
|
print("\n[Notification 通知]")
|
|
notif = Notification()
|
|
notif.title = "Test Notification"
|
|
notif.text = "This is a test"
|
|
print(f" title: {notif.title}")
|
|
print(f" text: {notif.text}")
|
|
|
|
# NotificationManager 测试
|
|
print("\n[NotificationManager 通知管理]")
|
|
nm = NotificationManager()
|
|
print(f" 类型: {type(nm).__name__}")
|
|
|
|
# AlarmManager 测试
|
|
print("\n[AlarmManager 闹钟管理]")
|
|
am = AlarmManager()
|
|
print(f" 类型: {type(am).__name__}")
|
|
|
|
|
|
def test_widget_module():
|
|
"""测试 android.widget 模块"""
|
|
print("\n" + "=" * 60)
|
|
print("android.widget 模块测试")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
from android_pyapi.android.widget import (
|
|
Toast, AlertDialog, Button, TextView,
|
|
EditText, ListView, RecyclerView,
|
|
)
|
|
|
|
# Toast 测试
|
|
print("\n[Toast 提示]")
|
|
toast = Toast.makeText(None, "Hello, Toast!", Toast.LENGTH_SHORT)
|
|
print(f" text: {toast._text}")
|
|
print(f" duration: {toast._duration}")
|
|
|
|
# AlertDialog 测试
|
|
print("\n[AlertDialog 对话框]")
|
|
dialog = AlertDialog(None)
|
|
print(f" 类型: {type(dialog).__name__}")
|
|
|
|
except ImportError as e:
|
|
print(f" widget 模块导入失败: {e}")
|
|
|
|
|
|
def test_graphics_module():
|
|
"""测试 android.graphics 模块"""
|
|
print("\n" + "=" * 60)
|
|
print("android.graphics 模块测试")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
from android_pyapi.android.graphics import (
|
|
Bitmap, Canvas, Paint, Color,
|
|
Rect, RectF, Path, Matrix,
|
|
)
|
|
|
|
# Color 测试
|
|
print("\n[Color 颜色]")
|
|
print(f" RED: {hex(Color.RED)}")
|
|
print(f" GREEN: {hex(Color.GREEN)}")
|
|
print(f" BLUE: {hex(Color.BLUE)}")
|
|
print(f" WHITE: {hex(Color.WHITE)}")
|
|
print(f" BLACK: {hex(Color.BLACK)}")
|
|
print(f" argb(255,128,64,32): {hex(Color.argb(255, 128, 64, 32))}")
|
|
|
|
# Bitmap 测试
|
|
print("\n[Bitmap 位图]")
|
|
bm = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
|
|
print(f" width: {bm.getWidth()}")
|
|
print(f" height: {bm.getHeight()}")
|
|
print(f" config: {bm.getConfig()}")
|
|
|
|
# Paint 测试
|
|
print("\n[Paint 画笔]")
|
|
paint = Paint()
|
|
paint.setColor(Color.RED)
|
|
paint.setTextSize(24.0)
|
|
print(f" color: {hex(paint.getColor())}")
|
|
print(f" textSize: {paint.getTextSize()}")
|
|
|
|
# Rect 测试
|
|
print("\n[Rect 矩形]")
|
|
rect = Rect(10, 20, 100, 200)
|
|
print(f" left: {rect.left}")
|
|
print(f" top: {rect.top}")
|
|
print(f" right: {rect.right}")
|
|
print(f" bottom: {rect.bottom}")
|
|
print(f" width: {rect.width()}")
|
|
print(f" height: {rect.height()}")
|
|
|
|
except ImportError as e:
|
|
print(f" graphics 模块导入失败: {e}")
|
|
|
|
|
|
def test_java_module():
|
|
"""测试 java 模块"""
|
|
print("\n" + "=" * 60)
|
|
print("java 模块测试")
|
|
print("=" * 60)
|
|
|
|
from android_pyapi.java.lang import (
|
|
String, StringBuilder, Integer, Math, System, Thread,
|
|
)
|
|
from android_pyapi.java.io import (
|
|
File, FileInputStream, FileOutputStream,
|
|
)
|
|
from android_pyapi.java.util import (
|
|
ArrayList, HashMap, HashSet,
|
|
)
|
|
from android_pyapi.org.json import JSONObject, JSONArray
|
|
|
|
# String 测试
|
|
print("\n[String 字符串]")
|
|
s = String("Hello, Android-pyApi!")
|
|
print(f" length: {s.length()}")
|
|
print(f" upper: {s.toUpperCase()}")
|
|
print(f" contains('Android'): {s.contains('Android')}")
|
|
print(f" substring(7): {s.substring(7)}")
|
|
|
|
# StringBuilder 测试
|
|
print("\n[StringBuilder 字符串构建器]")
|
|
sb = StringBuilder()
|
|
sb.append("Hello")
|
|
sb.append(", ")
|
|
sb.append("World!")
|
|
print(f" result: {sb.toString()}")
|
|
print(f" length: {sb.length()}")
|
|
|
|
# Integer 测试
|
|
print("\n[Integer 整数]")
|
|
print(f" parseInt('42'): {Integer.parseInt('42')}")
|
|
print(f" MAX_VALUE: {Integer.MAX_VALUE}")
|
|
print(f" MIN_VALUE: {Integer.MIN_VALUE}")
|
|
|
|
# Math 测试
|
|
print("\n[Math 数学]")
|
|
print(f" PI: {Math.PI}")
|
|
print(f" abs(-42): {Math.abs(-42)}")
|
|
print(f" max(10, 20): {Math.max(10, 20)}")
|
|
print(f" sqrt(144): {Math.sqrt(144)}")
|
|
print(f" pow(2, 10): {Math.pow(2, 10)}")
|
|
|
|
# ArrayList 测试
|
|
print("\n[ArrayList 列表]")
|
|
lst = ArrayList()
|
|
lst.add("Apple")
|
|
lst.add("Banana")
|
|
lst.add("Cherry")
|
|
print(f" size: {lst.size()}")
|
|
print(f" first: {lst.get(0)}")
|
|
print(f" contains('Banana'): {lst.contains('Banana')}")
|
|
|
|
# HashMap 测试
|
|
print("\n[HashMap 哈希表]")
|
|
m = HashMap()
|
|
m.put("name", "Android-pyApi")
|
|
m.put("version", "1.0.0")
|
|
print(f" name: {m.get('name')}")
|
|
print(f" size: {m.size()}")
|
|
print(f" containsKey('name'): {m.containsKey('name')}")
|
|
|
|
# JSONObject 测试
|
|
print("\n[JSONObject JSON 对象]")
|
|
json = JSONObject()
|
|
json.put("platform", "Windows")
|
|
json.put("python", True)
|
|
json.put("version", 3.12)
|
|
print(f" toString: {json.toString()}")
|
|
print(f" platform: {json.getString('platform')}")
|
|
|
|
# File 测试
|
|
print("\n[File 文件]")
|
|
f = File(os.environ.get('TEMP', '/tmp'), "test_file.txt")
|
|
print(f" path: {f.getAbsolutePath()}")
|
|
print(f" name: {f.getName()}")
|
|
print(f" parent: {f.getParent()}")
|
|
|
|
|
|
def main():
|
|
"""主测试函数"""
|
|
print("=" * 60)
|
|
print("Android-pyApi 扩展 API 测试")
|
|
print("=" * 60)
|
|
|
|
test_os_module()
|
|
test_content_module()
|
|
test_app_module()
|
|
test_widget_module()
|
|
test_graphics_module()
|
|
test_java_module()
|
|
|
|
print("\n" + "=" * 60)
|
|
print("所有测试完成!")
|
|
print("=" * 60)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |