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


    背景

    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服务

    1. package com.xxxx.xxxx.ticker.server;
    2. import android.content.ContentProvider;
    3. import android.content.ContentValues;
    4. import android.database.Cursor;
    5. import android.net.Uri;
    6. import android.os.Bundle;
    7. /**
    8. * @author walker
    9. * @date 2021/1/29.
    10. * @description 对外提供ContentProvider接口
    11. */
    12. public class CommonProvider_tme extends ContentProvider {
    13. @Override
    14. public boolean onCreate() {
    15. init();
    16. return false;
    17. }
    18. private void init() {
    19. }
    20. ;
    21. @Override
    22. public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    23. return null;
    24. }
    25. @Override
    26. public String getType(Uri uri) {
    27. return null;
    28. }
    29. @Override
    30. public Uri insert(Uri uri, ContentValues values) {
    31. return null;
    32. }
    33. @Override
    34. public int delete(Uri uri, String selection, String[] selectionArgs) {
    35. return 0;
    36. }
    37. @Override
    38. public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    39. return 0;
    40. }
    41. /**
    42. * @author walker
    43. * @Date 2021/3/11
    44. * @Description: 如果需要附加信息,用此字段存储
    45. */
    46. public static final String RES_DATA = "data";
    47. /**
    48. * @author walker
    49. * @Date 2021/3/11
    50. * @Description: int类型的处理码
    51. * 200 流程处理结束
    52. * 404 指定的方法名错误
    53. * 100 调用服务的认证信息错误
    54. * 500 业务错误
    55. * 501 处理异常
    56. */
    57. public static final String RES_CODE = "code";
    58. /**
    59. * @author walker
    60. * @Date 2021/3/11
    61. * @Description: 处理结果,提示处理的异常信息等
    62. */
    63. public static fin
  • 相关阅读:
    mac的vscode配置vue项目环境
    搜索与图论:染色法判定二分图
    杰理之录音模式改录音AUX会出现复位【篇】
    昭通市鲁甸县卯家湾安置区:凝心聚力 共谱民族团结进步新篇章
    力扣bash
    网络基础(一)
    OPPO的关键一步
    【光学】Matlab实现杨氏双缝干涉仿真
    正则表达式
    ue4c++【基础知识】
  • 原文地址:https://blog.csdn.net/ceshiren456/article/details/126764480