Lines Matching refs:self

70   def __init__(self):
71 self.name = None
72 self.intent = None
74 def get_name(self):
75 return self.name
77 def get_intent(self):
78 return self.intent
80 def get_data_directory(self):
81 return self.data_directory
83 def get_gdbserver_path(self):
84 return os.path.join(self.data_directory, "lib", "gdbserver")
86 def set_info(self, name, intent, data_directory):
87 self.name = name
88 self.intent = intent
89 self.data_directory = data_directory
92 self.name = None
93 self.intent = None
94 self.data_directory = None
102 def __init__(self, device=None, verbose=False):
103 self.verbose = verbose
104 self.current_device = device
105 self.temp_libdir = None
106 self.background_processes = []
107 self.android_build_top = os.getenv('ANDROID_BUILD_TOP', None)
108 if not self.android_build_top:
112 self.adb_path = os.path.join(self.android_build_top,
115 if not self.current_device:
116 devices = self.devices()
118 self.set_current_device(devices[0])
131 def _prepare_adb_args(self, args):
135 if self.current_device and len(self.current_device) > 0:
136 largs.insert(0, self.current_device)
139 largs.insert(0, self.adb_path)
143 def _background_adb(self, *args):
144 largs = self._prepare_adb_args(args)
147 if self.verbose:
150 self.background_processes.append(p)
158 def _call_adb(self, *args):
160 largs = self._prepare_adb_args(args)
162 if self.verbose:
172 def _shell(self, *args):
174 return self._call_adb(*args)
176 def _background_shell(self, *args):
178 return self._background_adb(*args)
180 def _cleanup_background_processes(self):
181 for handle in self.background_processes:
188 def _cleanup_temp(self):
189 if self.temp_libdir:
190 shutil.rmtree(self.temp_libdir)
191 self.temp_libdir = None
193 def __del__(self):
194 self._cleanup_temp()
195 self._cleanup_background_processes()
197 def _get_local_libs(self):
201 if not os.path.exists(lib_path) and self.verbose:
208 def _check_remote_libs_match_local_libs(self):
210 all_remote_libs = self._shell("ls", "/system/lib/*.so").split()
211 local_libs = self._get_local_libs()
213 self.temp_libdir = tempfile.mkdtemp()
220 tmp_path = os.path.join(self.temp_libdir, lib)
221 self.pull(remote_lib, tmp_path)
222 remote_hash = self._md5sum(tmp_path)
226 built_hash = self._md5sum(built_library)
230 self._cleanup_temp()
237 self._cleanup_temp()
239 def _md5sum(self, file):
246 def devices(self):
248 raw_output = self._call_adb("devices").split()
256 def set_current_device(self, serial):
257 if self.current_device == str(serial):
262 self.current_device = str(serial)
264 api_version = self.getprop("ro.build.version.sdk")
271 self._check_remote_libs_match_local_libs()
276 def getprop(self, property=None):
279 return self._call_adb(*["shell", "getprop"]).split('\n')
281 return str(self._call_adb(*["shell", "getprop",
285 def push(self, source, destination):
286 self._call_adb(*["push", source, destination])
289 def forward(self, source, destination):
290 self._call_adb(*["forward", source, destination])
293 def exists(self, filename):
294 raw_listing = self._shell(*["ls", filename])
298 def pull(self, remote_path, local_path):
299 self._call_adb(*["pull", remote_path, local_path])
303 def get_process_info(self, process_name=None):
305 raw_output = self._shell("ps")
325 def kill_by_pid(self, pid):
326 self._shell(*["kill", "-9", pid])
328 def kill_by_name(self, process_name):
329 (pid, user) = self.get_process_info(process_name)
331 self.kill_by_pid(pid)
332 (pid, user) = self.get_process_info(process_name)
337 def __init__(self, adb, name="android-status", cat=gdb.COMMAND_OBSCURE, verbose=False):
338 super (AndroidStatus, self).__init__(name, cat)
339 self.verbose = verbose
340 self.adb = adb
342 def _update_status(self, process_name, gdbserver_process_name):
343 self._check_app_is_loaded()
346 (self.pid, self.owner_user) = \
347 self.adb.get_process_info(process_name)
348 self.running = self.pid != None
351 (self.gdbserver_pid, self.gdbserver_user) = \
352 self.adb.get_process_info(gdbserver_process_name)
353 self.gdbserver_running = self.gdbserver_pid != None
356 if self.verbose:
359 print "\trunning: " + str(self.running)
360 print "\tpid: " + str(self.pid)
361 print "\tgdbserver running: " + str(self.gdbserver_running)
362 print "\tgdbserver pid: " + str(self.gdbserver_pid)
363 print "\tgdbserver user: " + str(self.gdbserver_user)
365 def _check_app_is_loaded(self):
369 def invoke(self, arg, from_tty):
370 self._check_app_is_loaded()
371 self._update_status(currentAppInfo.get_name(),
378 def _update_status(self):
379 AndroidStatus._update_status(self, self.process_name, \
380 self.gdbserver_path)
386 def _wait_for_process(self, process_name, retry_delay=1, num_retries=10):
388 (pid, user) = self.adb.get_process_info(process_name)
391 (pid, user) = self.adb.get_process_info(process_name)
397 def _gdbcmd(self, cmd, from_tty=False):
398 if self.verbose:
404 def _cleanup_temp(self):
405 if self.temp_dir:
406 shutil.rmtree(self.temp_dir)
407 self.temp_dir = None
409 def _cleanup_jdb(self):
410 if self.jdb_handle:
412 self.jdb_handle.terminate()
417 self.jdb_handle = None
419 def _load_local_libs(self):
421 self._gdbcmd("shar " + lib)
423 def __del__(self):
424 self._cleanup_temp()
425 self._cleanup_jdb()
427 def __init__ (self, adb, name="start-android-app", cat=gdb.COMMAND_RUNNING, verbose=False):
428 super (StartAndroidApp, self).__init__(adb, name, cat, verbose)
429 self.adb = adb
431 self.jdb_handle = None
434 self.jdwp_port = 8700
437 self.gdbserver_port = 5039
439 self.temp_dir = None
441 def start_process(self, start_running=False):
454 args.append(self.process_name + "/" + self.intent)
455 am_output = self.adb._shell(*args)
462 self.pid = self._wait_for_process(self.process_name)
464 if not self.pid:
466 + "Is " + self.process_name + " installed correctly?")
468 if self.verbose:
469 print "--==Android App Started: " + self.process_name \
470 + " (pid=" + self.pid + ")==--"
473 self.adb.forward("tcp:" + str(self.jdwp_port), \
474 "jdwp:" + str(self.pid))
476 def start_gdbserver(self):
481 if not self.adb.exists(self.gdbserver_path):
484 self.adb.push(gdbserver_local_path, self.gdbserver_path)
489 self.adb._background_shell(*[self.gdbserver_path, "--attach",
490 ":" + str(self.gdbserver_port), self.pid])
492 self._wait_for_process(self.gdbserver_path)
493 self._update_status()
495 if self.verbose:
497 + " (pid=" + str(self.gdbserver_pid) \
498 + " port=" + str(self.gdbserver_port) + ") ==--"
501 self.adb.forward("tcp:" + str(self.gdbserver_port), \
504 def attach_gdb(self, from_tty):
505 self._gdbcmd("target remote :" + str(self.gdbserver_port), False)
506 if self.verbose:
508 + str(self.gdbserver_port) + ")==-"
512 self._cleanup_temp()
513 self.temp_dir = tempfile.mkdtemp()
514 self.gdb_inferior = os.path.join(self.temp_dir, 'app_process')
515 self.adb.pull("/system/bin/app_process", self.gdb_inferior)
516 self._gdbcmd('file ' + self.gdb_inferior)
518 def start_jdb(self, port):
520 self._cleanup_jdb()
525 if self.verbose:
526 self.jdb_handle = subprocess.Popen(args, \
530 self.jdb_handle = subprocess.Popen(args, \
535 def invoke (self, arg, from_tty):
536 # TODO: self._check_app_is_installed()
537 self._check_app_is_loaded()
539 self.intent = currentAppInfo.get_intent()
540 self.process_name = currentAppInfo.get_name()
541 self.data_directory = currentAppInfo.get_data_directory()
542 self.gdbserver_path = currentAppInfo.get_gdbserver_path()
544 self._update_status()
546 if self.gdbserver_running:
547 self.adb.kill_by_name(self.gdbserver_path)
548 if self.verbose:
550 + str(self.gdbserver_pid) + ")==--"
551 self._update_status()
553 if self.running:
554 self.adb.kill_by_name(self.process_name)
555 if self.verbose:
556 print "--==Killed app process (pid=" + str(self.pid) + ")==--"
557 self._update_status()
559 self.start_process()
562 self.start_gdbserver()
565 self.attach_gdb(from_tty)
568 self._load_local_libs()
572 self._gdbcmd('set gDebugDumpDirectory="' + self.data_directory + '"')
576 self.start_jdb(self.jdwp_port)
581 def __init__(self, adb, name="run-android-app", cat=gdb.COMMAND_RUNNING, verbose=False):
582 super (RunAndroidApp, self).__init__(adb, name, cat, verbose)
584 def invoke(self, arg, from_tty):
585 StartAndroidApp.invoke(self, arg, from_tty)
586 self._gdbcmd("continue")
591 def __init__(self, adb, name="attach-android-app", cat=gdb.COMMAND_RUNNING, verbose=False):
592 super (AttachAndroidApp, self).__init__(adb, name, cat, verbose)
594 def invoke(self, arg, from_tty):
595 # TODO: self._check_app_is_installed()
596 self._check_app_is_loaded()
598 self.intent = currentAppInfo.get_intent()
599 self.process_name = currentAppInfo.get_name()
600 self.data_directory = currentAppInfo.get_data_directory()
601 self.gdbserver_path = currentAppInfo.get_gdbserver_path()
603 self._update_status()
605 if self.gdbserver_running:
606 self.adb.kill_by_name(self.gdbserver_path)
607 if self.verbose:
609 + str(self.gdbserver_pid) + ")==--"
610 self._update_status()
613 self.start_gdbserver()
616 self.attach_gdb(from_tty)
619 self._load_local_libs()
623 self._gdbcmd('set gDebugDumpDirectory="' + self.data_directory + '"')
628 def _awk_script_path(self, script_name):
642 def _awk(self, script, command):
643 args = ["awk", "-f", self._awk_script_path(script), str(command)]
645 if self.verbose:
658 def __init__(self, adb, name="load-android-app", cat=gdb.COMMAND_RUNNING, verbose=False):
659 super (LoadApp, self).__init__(adb, name, cat, verbose)
660 self.manifest_name = "AndroidManifest.xml"
661 self.verbose = verbose
662 self.adb = adb
663 self.temp_libdir = None
665 def _find_manifests(self, path):
668 for filename in fnmatch.filter(filenames, self.manifest_name):
672 def _usage(self):
676 def invoke(self, arg, from_tty):
685 if os.path.isfile(args[0]) and os.path.basename(args[0]) == self.manifest_name:
686 self.manifest_path = args[0]
688 manifests = self._find_manifests(args[0])
690 raise gdb.GdbError(self.manifest_name + " not found in: " \
691 + args[0] + "\n" + self._usage())
694 + self.manifest_name + " files found:\n" + "\n".join(manifests))
696 self.manifest_path = manifests[0]
698 raise gdb.GdbError("Invalid path: " + args[0] + "\n" + self._usage())
700 package_name = self._awk("extract-package-name.awk",
701 self.manifest_path)
702 launchable = self._awk("extract-launchable.awk",
703 self.manifest_path)
705 raise gdb.GdbError(self._usage())
708 data_directory = self.adb._shell("run-as", package_name,
713 or not self.adb.exists(data_directory):
720 if self.verbose:
728 def __init__(self, adb, name="set-android-device", cat=gdb.COMMAND_RUNNING, verbose=False):
729 super (SetAndroidDevice, self).__init__(name, cat)
730 self.verbose = verbose
731 self.adb = adb
733 def _usage(self):
736 def invoke(self, arg, from_tty):
738 raise gdb.GdbError(self._usage)