解决com.android.ddmlib.SyncException Remote object doesn‘t exist问题

当我们想知道某个app的界面布局是怎样的时候,
在这里插入图片描述

通常会使用sdk中的一个叫uiautomatorviewer.bat的工具来进行查看,但是app中的的动态界面就无法查看,会报如下错误,
在这里插入图片描述
因此我们需要找寻另一方法来获取这个界面,在搜遍全网,百度,谷歌后,终于找到了一个思路,就是使用Google的自动化测试框架UiAutomator来进行获取,实测也是成功获取到了动态界面的布局文件,下面是具体获取流程与操作步骤。
、、、、、、、、、、、、、start 、、、、、、、、、、、、、、、、、、、、、
使用Android Studio任意新建一个项目,
在app/build.gradle中添加如下依赖

androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.3.0'

在/app/src/androidTest/java下找到ExampleInstrumentedTest.java文件,
在这里插入图片描述
并在其中加入如下代码,

/**
 * 使用代码的方式抓取三方应用中动态界面
 * 解决使用UI Automator Viewer抓取布局时报Remote object doesn't exist的问题
 *
 * @throws IOException
 */
@Test
public void testDumpWindowHierarchy() throws IOException {
    Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
    UiDevice uiDevice = UiDevice.getInstance(instrumentation);

    Context targetContext = instrumentation.getTargetContext();
    //-->/storage/emulated/0/Android/data/com.android.settings.myapplication/cache
    String path1 = targetContext.getExternalCacheDir().getPath();
    long time = System.currentTimeMillis();

    String pngPath = path1 + "/dump_" + time + ".png";
    boolean screenshot = uiDevice.takeScreenshot(new File(pngPath));

    String uixPath = path1 + "/dump_" + time + ".uix";
    uiDevice.dumpWindowHierarchy(new File(uixPath));

    //代码走完,生成的文件会自动删除,所以以debug调试方式在这里断点,然后复制出png和uix文件
    //adb pull /sdcard/Android/data/com.android.settings.myapplication/cache/bbb_1728196636496.png .
    //adb pull /sdcard/Android/data/com.android.settings.myapplication/cache/bbb_1728196636496.uix .
    assertTrue(screenshot);
}

然后点击测试用例左边的运行按钮,选择Debug ‘testDumpWindowHierar…’,
在这里插入图片描述
当代码运行到assertTrue行时,使用adb pull命令从设备中获取抓取到的截屏与布局文件
在这里插入图片描述
在这里插入图片描述
最后使用UI Automator Viewer加载adb pull出来的这两个文件,就可以查看我们想到检查的app布局了
在这里插入图片描述
提示:上方所验证apk显示名称为DevCheck,包名为:flar2.devcheck

如果这篇文章有帮助到你,欢迎打赏,支持我的创作。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值