当我们想知道某个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
如果这篇文章有帮助到你,欢迎打赏,支持我的创作。