UiAutomationConnection之Android4.3的新类

介绍Android 4.3中新增的UiAutomationConnection类,该类用于Instrumentation测试中控制特定操作权限,允许模拟用户动作及执行跨应用测试。文章详细阐述了其工作原理及远程调用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 4.3上,Google的开发者新增了一个类UiAutomationConnection,它目前用在Instrumentation test中,控制某些操作的权限。
 
 
代码解释是这样说的:
 
UiAutomationConnection是一个远程对象,它从shell中传递给Instrumentation,用于控制某些特权操作,使得这些操作shell可以做,但Instrumentation不能做。这些特权操作需要实现UiAutomation,用来通过模拟用户动作和执行屏幕检测来实现跨应用的测试。
 
 
这里的shell实际上就是运行am.jar的进程,当用户通过shell命令运行一个测试,例如:
 
adb shell am instrument -e class com.android.browserpowertest.PowerMeasurement#myTest1 -w com.android.browserpowertest/com.android.browserpowertest.PowerTestRunner
 
这样就会在手机上启动一个shell进程,它将调用runInstrument来触发测试过程。
 
 
下面是4个时序图(中间用绿色横条分隔),分别描述的是:
 
1. 启动测试,shell创建UiAutomationConnection对象,并通过AMS传递给TestApp.
 
2. 测试完成后退出的过程。
 
3. TestApp调用connect.
 
4. TestApp调用disconnect.
 
 
从图中发现:UiAutomationConnection的对象是在shell进程中创建,调用它的成员函数,如connect或disconnect都是跨进程的远程调用(通过binder)。
用例 初始化失败 | 抖音调节音量-Super_Douyin_0002 | INFO: [UiAutomator2Server] Starting Server java.lang.IllegalStateException: UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@f2b79falrea dy registered! at android.os.Parcel.createExceptionOrNull(Parcel.java:2473) at android.os.Parcel.createException(Parcel.java:2449) at android.os.Parcel.readException(Parcel.java:2432) at android.os.Parcel.readException(Parcel.java:2374) at android.view.accessibility.IAccessibilityManager$Stub$Proxy.registerUiTestAutom ationService(IAccessibilityManager.java:830) at android.app.UiAutomationConnection.registerUiTestAutomationServiceLocked(UiAuto mationConnection.java:532) at android.app.UiAutomationConnection.connect(UiAutomationConnection.java:109) at android.app.UiAutomation.connectWithTimeout(UiAutomation.java:327) at java.lang.reflect.Method.invoke(Native Method) at mirror.RefMethod.call(RefMethod.java:63) at uiautomator.InstrumentShellWrapper.getUiAutomation(InstrumentShellWrapper.java: 101) at androidx.test.uiautomator.UiDevice$Api24Impl.getUiAutomationWithRetry(UiDevice. java:1545) at androidx.test.uiautomator.UiDevice.getUiAutomation(UiDevice.java:1468) at androidx.test.uiautomator.QueryController.<init>(QueryController.java:95) at androidx.test.uiautomator.UiDevice.<init>(UiDevice.java:115) at androidx.test.uiautomator.UiDevice.getInstance(UiDevice.java:296) at com.wetest.uia2.Main.runServer(Main.java:50) at com.wetest.uia2.Main.main(Main.java:30) at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:398) Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.accessibility.UiAutomationManager.registerUiTestAutomationSe rviceLocked(UiAutomationManager.java:111) at com.android.server.accessibility.AccessibilityManagerService.registerUiTestAuto mationService(AccessibilityManagerService.java:1324) at android.view.accessibility.IAccessibilityManager$Stub.onTransact(IAccessibility Manager.java:404) at android.os.Binder.execTransactInternal(Binder.java:1211) at android.os.Binder.execTransact(Binder.java:1175) callee: null 1537/3726 java.lang.IllegalStateException: UiAutomation not connected, UiAutomation@d46de31 at android.app.UiAutomation.throwIfNotConnectedLocked(UiAutomation.java:1498) at android.app.UiAutomation.getServiceInfo(UiAutomation.java:614) at androidx.test.uiautomator.UiDevice.getUiAutomation(UiDevice.java:1482) at androidx.test.uiautomator.QueryController.<init>(QueryController.java:95) at androidx.test.uiautomator.UiDevice.<init>(UiDevice.java:115) at androidx.test.uiautomator.UiDevice.getInstance(UiDevice.java:296) at com.wetest.uia2.Main.runServer(Main.java:50) at com.wetest.uia2.Main.main(Main.java:30) at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:398)
最新发布
07-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值