appium源码分析(十三)-UpdateStrings

摘要

其实这个应该是要放到最先的部分去将的,先说下updateStrings到底是做什么吧,它实际上就是加载我们apk文件中的string.xml将其中的内容转换成JsonObject的格式,进行保存,后续查找控件元素的时候会用到它。

正文

appium Server

这次我们先不看源代码,我们先看看我们通过appium安装apk的时候,它都做了什么,这里我们直接截取appium Server的log吧。
这里写图片描述
做的操作真的很多

  1. 获取系统的语言
  2. 获取string.xml文件将其转换成strings.json,将其推送的/data/local/tmp的文件目录下
  3. aapt解析 AndroidManifest.xml文件
  4. 重签名apk,重签名后的apk命名为 MD5+apk
  5. 判断对应的应用是否安装,未安装的话则先清空/data/local/tmp下的文件,将重签名的apk推送过去
  6. 先进行卸载对应的应用,再进行安装
  7. 最后推送boottrap.jar包,imeapk,setting.apk,unlocak.apk

UpdateStrings

public static boolean loadStringsJson() {
    Logger.debug("Loading json...");
    try {
      String filePath = "/data/local/tmp/strings.json";
      final File jsonFile = new File(filePath);
      // json will not exist for apks that are only on device
      // because the node server can't extract the json from the apk.
      if (!jsonFile.exists()) {
        return false;
      }
      final DataInputStream dataInput = new DataInputStream(
          new FileInputStream(jsonFile));
      final byte[] jsonBytes = new byte[(int) jsonFile.length()];
      dataInput.readFully(jsonBytes);
      // this closes FileInputStream
      dataInput.close();
      final String jsonString = new String(jsonBytes, "UTF-8");
      Find.apkStrings = new JSONObject(jsonString);
      Logger.debug("json loading complete.");
    } catch (final Exception e) {
      Logger.error("Error loading json: " + e.getMessage());
      return false;
    }
    return true;
  }

以上的代码首先先判断string.json这个文件是否存在,因为如果你的是通过制定对应的package以及activity来启动应用的话,string.json是无法获得的,这里从上面的log应该就能够很多的判断出来,只有是安装的apk才能够获取到string.json文件。
若string.json存在的话,就读取其中的文件内容,并将其转换成JSONobject对象赋值给Find.apkStrings。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值