赞
踩
背景
Android系统的UI测试框架有Uiautomator1.0和Uiautomator2.0,虽然Uiautomator1.0在Android11及以后的版本被放弃了,但是我们仍然可以通过反射FrameWork代码初的方式始化Uiautomator1.0服务,这样我们原有的测试用例就可以继续运行了。
今天分享一下Uiautomator1.0与server app跨进程通信的方案,我们一般情况下都使用socket进行通信,但是当server app没有运行时就很难及时处理,我们让server app实现ContentProvider来对外提供服务,即使server app没有运行,我们也能正常调用服务,系统会自动帮我们启动server app。
在应用(server app)内提供ContentProvider服务是很简单的,但是Uiautomator1.0和其他Shell进程是没有办法直接访问的,我们需要依赖反射技术进行调用。
实现
server app 创建ContentProvider服务
- package com.xxxx.xxxx.ticker.server;
-
- import android.content.ContentProvider;
- import android.content.ContentValues;
- import android.database.Cursor;
- import android.net.Uri;
- import android.os.Bundle;
-
-
- /**
- * @author walker
- * @date 2021/1/29.
- * @description 对外提供ContentProvider接口
- */
- public class CommonProvider_tme extends ContentProvider {
-
- @Override
- public boolean onCreate() {
- init();
- return false;
- }
-
- private void init() {
- }
-
- ;
-
- @Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
- return null;
- }
-
- @Override
- public String getType(Uri uri) {
- return null;
- }
-
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- return null;
- }
-
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- return 0;
- }
-
- @Override
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- return 0;
- }
-
- /**
- * @author walker
- * @Date 2021/3/11
- * @Description: 如果需要附加信息,用此字段存储
- */
- public static final String RES_DATA = "data";
- /**
- * @author walker
- * @Date 2021/3/11
- * @Description: int类型的处理码
- * 200 流程处理结束
- * 404 指定的方法名错误
- * 100 调用服务的认证信息错误
- * 500 业务错误
- * 501 处理异常
- */
- public static final String RES_CODE = "code";
- /**
- * @author walker
- * @Date 2021/3/11
- * @Description: 处理结果,提示处理的异常信息等
- */
- public static fin
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。