카테고리 보관물: Programming

Android emacs (android-host.el) 기능 추가

AOSP에서 제공되는 Emacs용 Andorid 개발환경을 설정한 이후(이 post 참조) 잘 모르는 LISP을 더듬어 가며 추가한 몇 가지 기능을 소개합니다.

adb reboot (M-x android-adb-reboot)

Module등을 변경한 후에 device를 reset하는 명령어가 없어서 추가했다. 이 기능의 장점을 굳이 꼽자면 shell을 따로 뛰우지 않고 리붓을 할수 있다는거…

(defun android-adb-reboot ()
  "Execute 'adb reboot'."
  (interactive)
  (android-adb-command "reboo

Module push (M-x android-adb-push-module)

Compile한 module을 target에 push 할 때 사용한다. Command를 입력하면 push 할 source와 target을 물어보고 adb push command를 실행한다.

(defun android-adb-push-module (source target)
  "Push specified module into target path."
  (interactive "fSource: \nsTarget: ")

  (android-adb-root)
  (android-adb-remount)
  (android-adb-command
    (concat "push " source " " target) 'p))

Module push Hotkey  (C-x a p)

위의 android-adb-push-module 함수를 쓰다보니 path를 입력하는게 무척 귀찮다. android-compile 명령어를 수행해서 만들어지는 출력 버퍼에서 위의 단축키로 target의 해당 directory로 module을 push한다.

Install: out/target/product/TARGET_DEVICE/system/xxx/yyy.zz

출력 버퍼로 이동해서 출력된 결과물 위에 cursor를 놓고 ‘C-x a p’를 입력하면 그 경로를 읽어서 target으로 push 한다. Source의 path에서 target 위치를 읽어 오게 되어 있어서 특별한 입력이 필요 하지 않다.

(define-key map (kbd "p") 'android-adb-push-module-at-point)
...

(defun android-adb-push-module-at-point ()
  "Push module path at cursor point an push to the target path."
  (interactive)

  (let*
    (
      (sourcepath (concat (android-find-build-tree-root) (thing-at-point 'filename)))
      (targetpath (substring sourcepath (string-match "\/system" sourcepath) nil)))
    (android-adb-push-module sourcepath targetpath)))

전체 수정내역을 포함하는 파일: icon_text_file android-host.el