Home | History | Annotate | Download | only in files
      1 ;;;; Copyright 2007 The Android Open Source Project
      2 
      3 ;;; Set up GUD+JDB to attach to a Java process running on the phone or
      4 ;;; under the emulator.
      5 
      6 (defvar android-jdb-port-history '("8700")
      7  "history of ports supplied to `android-jdb'")
      8 
      9 (defvar android-jdb-project-root-history '()
     10  "history of project roots supplied to `android-jdb'")
     11 (defvar android-jdb-history nil
     12  "history of commands supplied to `android-jdb'")
     13 
     14 (defvar android-jdb-activity-class-history ()
     15  "history of activity classes supplied to `start-android-activity'")
     16 
     17 (defcustom  android-jdb-command-name "jdb"
     18   "Name of Java debugger."
     19   :type 'string
     20   :group 'android)
     21 
     22 (defgroup android nil
     23   "Android Applications."
     24   :group 'applications)
     25 
     26 (defcustom android-project-root nil
     27  "This is where your Android project root is stored."
     28   :type 'directory
     29  :group 'android )
     30 
     31 (defcustom android-apk nil
     32  "This is where your Android Application Package is stored."
     33  :type 'string
     34  :group 'android)
     35 
     36 (defcustom android-activity-class nil
     37  "This is where your Android Activity class is stored."
     38  :type 'string
     39  :group 'android)
     40 
     41 (defun android-read-project-root ()
     42  (if (or (string-match "XEmacs" emacs-version)
     43          (>= emacs-major-version 22))
     44      (read-file-name "Android project root: "
     45                      android-project-root
     46                      nil
     47                      t
     48                      nil
     49                      'file-directory-p)
     50    (labels ((read-directory ()
     51                             (read-file-name "Android project root: "
     52                                             android-project-root
     53                                             nil
     54                                             t
     55                                             nil)))
     56      (do ((entered-root (read-directory) (read-directory)))
     57          ((and entered-root
     58                (file-directory-p entered-root))
     59           (expand-file-name entered-root))))))
     60 
     61 (defun android-jdb (port root)
     62  "Set GUD+JDB up to run against Android on PORT in directory ROOT."
     63  (interactive
     64   (list
     65    (read-from-minibuffer "Activity's JDWP DDMS port: "
     66                      (car android-jdb-port-history)
     67                      nil
     68                      t
     69                      'android-jdb-port-history)
     70                     (android-read-project-root)))
     71  (setq android-project-root root)
     72  (let ((jdb-command
     73         (format "%s -attach localhost:%s -sourcepath%s"
     74                 android-jdb-command-name
     75                 port
     76                 (format "%s/src" root))))
     77    (if (not (string= jdb-command (car android-jdb-history)))
     78        (push jdb-command android-jdb-history))
     79    (jdb jdb-command)))
     80 
     81 (defun android-emulate ()
     82  "Run the Android emulator. This expects the SDK tools directory to be in the current path."
     83  (interactive)
     84  (compile "emulator"))
     85 
     86 (defun android-install-app (apk)
     87   "Install an Android application package APK in the Android emulator. This expects the SDK tools directory to be in the current path."
     88   (interactive (list (expand-file-name
     89                       (read-file-name "Android Application Package (.apk): "
     90                                       nil
     91                                       android-apk
     92                                       t
     93                                       nil
     94                                       nil))))
     95   (setq android-apk apk)
     96   (compile (format "adb install -r %s" apk)))
     97 
     98 (defun android-uninstall-app (package-name)
     99   "Uninstall an Android application package APK in the Android emulator. This expects the SDK tools directory to be in the current path.
    100 Specify the package name --- and not the name of the application e.g., com.android.foo."
    101   (interactive
    102    (list
    103     (read-from-minibuffer "Package: ")))
    104   (compile (format "adb uninstall %s" package-name)))
    105 
    106 (defun android-start-activity (package class)
    107  "Start the activity PACKAGE/CLASS in the Android emulator. This expects the SDK tools directory to be in the current path."
    108  (interactive
    109   (list
    110    (read-from-minibuffer "Package: ")
    111    (read-from-minibuffer "Activity Java class: "
    112          (car android-jdb-activity-class-history)
    113          nil
    114          t
    115          'android-jdb-activity-class-history)))
    116  (compile (format "adb shell am start -n %s/%s" package class)))
    117 
    118 (defun android-debug-activity (package class)
    119  "Start the activity PACKAGE/CLASS within the debugger in the Android emulator. This expects the SDK tools directory to be in the current path."
    120  (interactive
    121   (list
    122    (read-from-minibuffer "Package: ")
    123    (read-from-minibuffer "Activity Java class: "
    124          (car android-jdb-activity-class-history)
    125          nil
    126          t
    127          'android-jdb-activity-class-history)))
    128  (compile (format "adb shell am start -D -n %s/%s" package class)))
    129 
    130 (provide 'android)
    131 
    132