private static IAndroidLogcatTaskResult QueryDevicesAsync(IAndroidLogcatTaskInput input)
        {
            var adb = ((AndroidLogcatRetrieveDeviceIdsInput)input).adb;

            if (adb == null)
                throw new NullReferenceException("ADB interface has to be valid");

            var result = new AndroidLogcatRetrieveDeviceIdsResult();
            result.notifyListeners = ((AndroidLogcatRetrieveDeviceIdsInput)input).notifyListeners;

            AndroidLogcatInternalLog.Log("{0} devices", adb.GetADBPath());
            try
            {
                var adbOutput = adb.Run(new[] { "devices" }, "Unable to list connected devices. ");
                foreach (var line in adbOutput.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(line => line.Trim()))
                {
                    AndroidLogcatInternalLog.Log(" " + line);
                    AndroidLogcatRetrieveDeviceIdsResult.DeviceInfo info;
                    if (ParseDeviceInfo(line, out info.id, out info.state))
                        result.deviceInfo.Add(info);
                }
            }
            catch (Exception ex)
            {
                AndroidLogcatInternalLog.Log(ex.Message);
                result.deviceInfo = new List<AndroidLogcatRetrieveDeviceIdsResult.DeviceInfo>();
            }

            return result;
        }
        private static IAndroidLogcatTaskResult QueryMemoryAsync(IAndroidLogcatTaskInput input)
        {
            var workInput = ((AndroidLogcatQueryMemoryInput)input);
            var adb       = workInput.adb;

            if (adb == null)
            {
                throw new NullReferenceException("ADB interface has to be valid");
            }

            var cmd = "-s " + workInput.deviceId + " shell dumpsys meminfo " + workInput.packageName;

            AndroidLogcatInternalLog.Log("{0} {1}", adb.GetADBPath(), cmd);

            string outputMsg = string.Empty;

            try
            {
                outputMsg = adb.Run(new[] { cmd }, "Failed to query memory for " + workInput.packageName);
            }
            catch (Exception ex)
            {
                AndroidLogcatInternalLog.Log("Failed to query memory: \n" + ex.Message);
            }
            var result = new AndroidLogcatQueryMemoryResult();

            result.deviceId         = workInput.deviceId;
            result.packageName      = workInput.packageName;
            result.packageProcessId = workInput.packageProcessId;
            result.contents         = outputMsg;
            //AndroidLogcatInternalLog.Log(outputMsg);

            return(result);
        }
        internal static IAndroidLogcatTaskResult Execute(IAndroidLogcatTaskInput input)
        {
            var adb = ((AndroidLogcatRetrieveDeviceIdsInput)input).adb;

            if (adb == null)
            {
                throw new NullReferenceException("ADB interface has to be valid");
            }

            var result = new AndroidLogcatRetrieveDeviceIdsResult();

            AndroidLogcatInternalLog.Log("{0} devices", adb.GetADBPath());
            var adbOutput = adb.Run(new[] { "devices" }, "Unable to list connected devices. ");

            foreach (var line in adbOutput.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(line => line.Trim()))
            {
                AndroidLogcatInternalLog.Log(" " + line);
                if (line.EndsWith("device"))
                {
                    var deviceId = line.Split(new[] { '\t', ' ' })[0];
                    result.deviceIds.Add(deviceId);
                }
            }

            return(result);
        }
示例#4
0
    private IAndroidLogcatTaskResult QueryDevicesAsync(IAndroidLogcatTaskInput input)
    {
        var result = new AndroidLogcatRetrieveDeviceIdsResult();

        result.notifyListeners = ((AndroidLogcatRetrieveDeviceIdsInput)input).notifyListeners;

        try
        {
            var adbOutput = m_QueuedInfos.Count > 0 ? m_QueuedInfos[0] : string.Empty;
            if (m_QueuedInfos.Count > 0)
            {
                m_QueuedInfos.RemoveAt(0);
            }

            foreach (var line in adbOutput.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(line => line.Trim()))
            {
                AndroidLogcatRetrieveDeviceIdsResult.DeviceInfo info;
                if (ParseDeviceInfo(line, out info.id, out info.state))
                {
                    result.deviceInfo.Add(info);
                }
            }
        }
        catch (Exception)
        {
            result.deviceInfo = new List <AndroidLogcatRetrieveDeviceIdsResult.DeviceInfo>();
        }

        return(result);
    }
示例#5
0
        internal void Schedule(IAndroidLogcatTaskInput taskData, Func <IAndroidLogcatTaskInput, IAndroidLogcatTaskResult> asyncAction, Action <IAndroidLogcatTaskResult> integrateAction, bool synchronous)
        {
            if (!m_Running)
            {
                AndroidLogcatInternalLog.Log("Ignore schedule action, because dispatcher is not running.");
                return;
            }

            if (synchronous)
            {
                integrateAction(asyncAction.Invoke(taskData));
                return;
            }

            lock (m_AsyncTaskQueue)
            {
                var task = new AsyncTask()
                {
                    taskData = taskData, asyncAction = asyncAction, integrateAction = integrateAction
                };
                m_AsyncTaskQueue.Enqueue(task);
                if (!m_AutoResetEvent.Set())
                {
                    throw new Exception("Failed to signal auto reset event in dispatcher.");
                }
            }
        }
    IAndroidLogcatTaskResult PerformAsycnTask(IAndroidLogcatTaskInput input)
    {
        var data = (TaskInputData)input;

        return(new TaskResultData()
        {
            mainThreadId = data.mainThreadId, workerThreadId = Thread.CurrentThread.ManagedThreadId
        });
    }
        private static IAndroidLogcatTaskResult ExecuteScreenCapture(IAndroidLogcatTaskInput input)
        {
            var    i = (AndroidLogcatCaptureScreenCaptureInput)input;
            string error;
            var    path = AndroidLogcatUtilities.CaptureScreen(i.adb, i.deviceId, out error);

            return(new AndroidLogcatCaptureScreenCaptureResult()
            {
                imagePath = path,
                error = error
            });
        }
        internal static IAndroidLogcatTaskResult Execute(IAndroidLogcatTaskInput input)
        {
            var result = new AndroidLogcatConnectToDeviceResult();

            try
            {
                var workInput = ((AndroidLogcatConnectToDeviceInput)input);
                var adb       = workInput.adb;

                if (adb == null)
                {
                    throw new NullReferenceException("ADB interface has to be valid");
                }

                var    ip   = workInput.ip;
                var    port = workInput.port;
                string cmd;
                if (workInput.setListeningPort)
                {
                    cmd = "-s " + workInput.deviceId + " tcpip " + port;
                    AndroidLogcatInternalLog.Log("{0} {1}", adb.GetADBPath(), cmd);
                    var resultTCPIP = adb.Run(new[] { cmd }, "Failed to adb tcpip " + port);
                    AndroidLogcatInternalLog.Log(resultTCPIP);
                    var wait = 3000;
                    AndroidLogcatInternalLog.Log("Waiting {0} ms until ADB returns", wait);
                    System.Threading.Thread.Sleep(wait);
                }

                cmd = "connect " + ip + ":" + port;
                AndroidLogcatInternalLog.Log("{0} {1}", adb.GetADBPath(), cmd);

                var errorMsg  = "Unable to connect to ";
                var outputMsg = adb.Run(new[] { cmd }, errorMsg + ip + ":" + port);

                result.message = outputMsg;
                result.success = true;
                if (outputMsg.StartsWith(errorMsg) || outputMsg.StartsWith("failed to connect"))
                {
                    AndroidLogcatInternalLog.Log(outputMsg);
                    result.success = false;
                }
            }
            catch (Exception ex)
            {
                AndroidLogcatInternalLog.Log(ex.Message);
                result.success = false;
                result.message = ex.Message;
            }
            return(result);
        }
 IAndroidLogcatTaskResult PerformAsycnTaskThrowException(IAndroidLogcatTaskInput input)
 {
     throw new Exception("Purposely throwing");
 }