Shell 进程通过 ContentProvider 实现跨进程通信

本文介绍了如何在Android系统中,使用ContentProvider实现Shell进程(如Uiautomator1.0)与server app的跨进程通信。当server app未运行时,系统会自动启动它以提供服务。主要内容包括在server app中创建ContentProvider服务,以及在Shell进程中通过反射调用ContentProvider的方法。
摘要由CSDN通过智能技术生成

背景

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 final
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值