查看界面控件的作用

  • 原生方式开发的app,使用Java和C++开发,加密用的是Java和C++
  • H5的app,使用Webview控件加载网页,加密用的是JS
  • app自动化测试,需要知道控件的id,或者说需要定位到控件

使用uiautomatorviewer.bat查看

Android SDK根目录\tools\bin

注意:如果关闭打开的cmd窗口,UI Automator Viewer窗口也就关闭了

android l加载控件 安卓app控件读取_JAVA


这时你手机的页面便会显示出来

android l加载控件 安卓app控件读取_android l加载控件_02

使用Appium查看

  • Appium的下载和安装
  • Appium的配置
  • 安装Java SDK
  • 配置android SDK
  • 设置ANDROID_HOME环境变量
  • Appium的启动参数
    视频中用的是appium 1.22以下的版本,截止我写这篇文章,最新版为1.22.2,服务和元素查看器分家了,查看元素信息就必须下载Appium Inspector。我选择下载1.21.2,也就是分家前的最后一个版本。
    点击start server

    点击“放大镜”

    比如我查看手机的设置app 的控件信息,需要输入这些信息

    设置完成之后点击保存,然后点击右下角的start session
其中的deviceName的获得

android l加载控件 安卓app控件读取_Java_03

我使用的是k30pro,比教学视频中已经root的pixel1代坑多一些
主要出现的问题就是"orginal error:error executing adbexec appium",关于这个问题的解决建议看这一篇:appium启动start session报错记录Error executing adbExec 而对于小米手机,在开发者选项中一定要开启这些开关:

  • OEM解锁
  • USB调试
  • USB安装
  • USB调试(安全设置)
    在接下来的过程中,手机上会不断弹窗(下次使用就不会弹了),点击允许即可,手机上会多出一个app

    成功!

这时候手机上点击设置的其他页面,再点击appium中的刷新,也是可以截屏的

android l加载控件 安卓app控件读取_JAVA_04

点击其他应用,点击appium中的刷新按钮,依然可以截屏(感觉有点吓人啊,就像一个木马)

给足鸡老师排面

禁止截屏

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

在我们的app中添加上面这句话

android l加载控件 安卓app控件读取_JAVA_05


重新安装这个app,打开app,这时候通过appium已经无法截取此app里面的页面使用sdk中的工具同样也无法对这个app页面截图

android l加载控件 安卓app控件读取_android l加载控件_06

上面这行代码可以以三种形式表现:

  • 直接明写在代码中,就像我上面那个app一样
  • 利用JAVA反射
  • SO层,对函数名类名进行加密

无论哪一种,hook通杀,hook掉getWindow()下的addFlag()方法。

也可以调用clearFlag()方法来消除上面那行代码的作用,不过就需要考虑一个时机问题。需要先addFlag,再clearFlag
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);