/// <summary> /// /// </summary> /// <param name="emulatorName">设备名</param> /// <param name="phoneNumber">设备名对应的手机号</param> /// <param name="listPosition">再列表中对应的索引位置</param> public Device(string emulatorName, int listPosition, ListViewItem item) { EmulatorName = emulatorName; ListPosition = listPosition; InitADBShell(); this.item = item; this.item.ForeColor = Color.Green; HomePath = AppDomain.CurrentDomain.BaseDirectory; Xlog.I(emulatorName, "HomePath: {0}", HomePath); Actions.UpdateState(ListPosition, "已初始化连接!"); }
/// <summary> /// 读取当前流内的所有行,尾行总是为0 /// </summary> /// <returns></returns> private List <string> ReadLines(bool NeedLog) { List <string> lines = new List <string>(); string line; int counter = 1; try { do { line = P.StandardOutput.ReadLine(); lines.Add(line); if (NeedLog) { Xlog.I(EmulatorName, "{0}: {1}", counter++, line); } } while (!line.Equals(string.Empty) && !line.EndsWith("}")); } catch (Exception ex) { Xlog.E(EmulatorName, "读取流时发生错误,{0}", ex.Message); } return(lines); }
/// <summary> /// 拉取数据 /// </summary> public void FetchData() { try { Actions.UpdateState(ListPosition, "正准备读取手机号码!"); string pn = ReadPhoneNumber();// 读取最后登陆的手机号码 Actions.UpdateState(ListPosition, string.Format("读取到的号码为:{0}", pn)); if ("".Equals(pn)) { Actions.UpdateState(ListPosition, "未检测到已登录的号码!是否数据已经清理或者未登录!"); return; } else { PhoneNumber = pn; Actions.UpdatePN(ListPosition, PhoneNumber); Actions.UpdateState(ListPosition, "正在构建用户目录!"); DataPath = string.Format("{0}{1}", HomePath, PhoneNumber); if (!Directory.Exists(DataPath)) { Directory.CreateDirectory(DataPath); Xlog.I(EmulatorName, "Created DataDir: {0}", DataPath); } } Actions.UpdateState(ListPosition, "正准备清理历史数据 db.tar!"); P.StandardInput.WriteLine(string.Format("adb -s {0} shell rm /sdcard/db.tar", EmulatorName)); ReadLines(true); Actions.UpdateState(ListPosition, "正准备清理历史数据 sp.tar!"); P.StandardInput.WriteLine(string.Format("adb -s {0} shell rm /sdcard/sp.tar", EmulatorName)); ReadLines(true); Actions.UpdateState(ListPosition, "正准备打包数据库!"); P.StandardInput.WriteLine(string.Format("adb -s {0} shell tar -cvf sdcard/db.tar /data/data/com.btd.wallet/databases", EmulatorName)); ReadLines(true); Actions.UpdateState(ListPosition, "正准备打包配置文件!"); P.StandardInput.WriteLine(string.Format("adb -s {0} shell tar -cvf sdcard/sp.tar /data/data/com.btd.wallet/shared_prefs", EmulatorName)); ReadLines(true); Actions.UpdateState(ListPosition, "正准备拷贝 db.tar 到本地!"); P.StandardInput.WriteLine(string.Format("adb -s {0} pull /sdcard/db.tar {1}", EmulatorName, DataPath)); ReadLines(true); Actions.UpdateState(ListPosition, "正准备拷贝 sp.tar 到本地!"); P.StandardInput.WriteLine(string.Format("adb -s {0} pull /sdcard/sp.tar {1}", EmulatorName, DataPath)); ReadLines(true); Actions.UpdateState(ListPosition, "正准备读取DeviceKey!"); string key = ReadDeviceKey();// 读取deviceKey Actions.UpdateState(ListPosition, string.Format("读取到的DeviceKey为:{0}", key)); if (File.Exists(string.Format("{0}\\{1}.txt", DataPath, PhoneNumber))) { File.Delete(string.Format("{0}\\{1}.txt", DataPath, PhoneNumber)); } if (!"".Equals(key)) { File.AppendAllText(string.Format("{0}\\{1}.txt", DataPath, PhoneNumber), key + "\r\n"); } Actions.UpdateState(ListPosition, "正准备读取Cookie!"); string cookie = ReadCookie(); // 读取cookie Actions.UpdateState(ListPosition, string.Format("DeviceKey: {0}, Cookie: {1}", key, cookie)); if (!"".Equals(cookie)) { File.AppendAllText(string.Format("{0}\\{1}.txt", DataPath, PhoneNumber), cookie); } } catch (Exception ex) { Xlog.E(EmulatorName, "拉取数据发生错误!{0}", ex.Message); } }