appium源码分析(十三)-UpdateStrings
摘要其实这个应该是要放到最先的部分去将的,先说下updateStrings到底是做什么吧,它实际上就是加载我们apk文件中的string.xml将其中的内容转换成JsonObject的格式,进行保存,后续查找控件元素的时候会用到它。正文appium Server这次我们先不看源代码,我们先看看我们通过appium安装apk的时候,它都做了什么,这里我们直接截取appium Server的log吧。
摘要
其实这个应该是要放到最先的部分去将的,先说下updateStrings到底是做什么吧,它实际上就是加载我们apk文件中的string.xml将其中的内容转换成JsonObject的格式,进行保存,后续查找控件元素的时候会用到它。
正文
appium Server
这次我们先不看源代码,我们先看看我们通过appium安装apk的时候,它都做了什么,这里我们直接截取appium Server的log吧。
做的操作真的很多
- 获取系统的语言
- 获取string.xml文件将其转换成strings.json,将其推送的/data/local/tmp的文件目录下
- aapt解析 AndroidManifest.xml文件
- 重签名apk,重签名后的apk命名为 MD5+apk
- 判断对应的应用是否安装,未安装的话则先清空/data/local/tmp下的文件,将重签名的apk推送过去
- 先进行卸载对应的应用,再进行安装
- 最后推送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。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)