글쓴이 보관물: litcoder

Emacs에서 Android 개발 환경 사용

AOSP에는 Emacs에서 Android 개발환경을 사용할 수 있도록 몇몇 el file들을 제공하는데, platform  module build를 주로 하게 되는 나로써는 사용에 부족함이 없는 것 같다. Module build와 기본적인 ADB 조작을 지원하는 이 script들의 기능이 부족하다고 느낀다면 Android 개발환경을 보다 적극적으로 지원하는 android-mode와 같은 project를 고려해 보는것도 좋을 것이다.

buildspec.mk 설정

사실 이 기능은 그동안 사용하지 않았었는데, AOSP에서 지원하는 el script들을 사용하려면 설정해 주어야 한다. 간단한 과정을 거쳐 설정해 놓고 보니 shell에서도 사전설정 없이 ‘make target’ command만으로 build를 할 수 있어서 편하다. 대신 ‘cd $OUT’이나 ‘croot’ 같은 이동 command들을 사용할 수 없다는 것은 불편한 점이다.

<ANDROID_ROOT>/build/buildspec.mk.default file을 복사해서 환경에 맞게 수정한 다음 <ANDROID_ROOT> 위치에 놓아두면 build 명령을 내릴때 자동으로 참조된다. 기본적으로 TARGET_PRODUCT, TARGET_BUILD_VARIANT 정도만 수정하면되는데 특이한 build환경을 사용하고 있다면 나머지 항목들은 읽어보고 자신에 맞게 수정하자.

# Choose a product to build for. Look in the products directory for ones
# that work.
ifndef TARGET_PRODUCT
  TARGET_PRODUCT:=product_name
endif

# Choose a variant to build. If you don't pick one, the default is eng.
# User is what we ship. Userdebug is that, with a few flags turned on
# for debugging. Eng has lots of extra tools for development.
ifndef TARGET_BUILD_VARIANT
  TARGET_BUILD_VARIANT:=eng
endif

el file들 복사 및 설정

<ANDROID_ROOT>/development/ide/emacs/ 안에 있는 file들을 Emacs 환경 directory로 복사한 다음 해당 file이 load되도록 init file을 수정한다.

mkdir ~/.emacs.d/android.el
cp <ANDROID_ROOT>/development/ide/emacs/*.el ~/.emacs.d/android.el/ android-common.el android-compile.el android-host.el

다음을 init file에 붙여 넣으면 된다.

; Load Android tools
(add-to-list 'load-path "~/.emacs.d/android.el/")
(require 'android-host)
(require 'android-compile)


사용

편집 중인 file의 module을 build하려면 ‘M-x android-compile’을 입력 하면 된다. 그 외의 ADB에 관련한 명령어 들은 android-host.el script에 설명되어 있다.

;; C-x a a android-adb-root
;; C-x a r android-adb-remount
;; C-x a s android-adb-sync
;; C-x a b android-adb-shell-reboot-bootloader
;; C-x a f android-fastboot-flashall

[Tip] Eclipse가 시작되지 않을 때

뭔가 잘못되어서 eclipse를 실행도중에 끈 것 같은데 그 후 부터는 eclipse가 시작되지 않는 문제가 생겨서 이리 저리 검색하다가 Stackoverflow에서 이 thread를 찾았다. 실제로 내 <WORKSPACE> 경로에 있는 .metadata/.log를 보니 다음과 같은 오류 메세지가 보이고 있었다.

[WORKSPACE/.metadata/.log]

!ENTRY org.eclipse.core.jobs 4 2 2014-07-11 09:08:36.054
!MESSAGE An internal error occurred during: "Workbench early startup".
!STACK 0
java.lang.NullPointerException
at org.eclipse.core.internal.runtime.InternalPlatform.getLog(InternalPlatform.java:354)
at org.eclipse.core.runtime.Plugin.getLog(Plugin.java:291)
at org.eclipse.ui.internal.WorkbenchPlugin.log(WorkbenchPlugin.java:809)
at org.eclipse.ui.internal.EarlyStartupRunnable.handleException(EarlyStartupRunnable.java:81)
at org.eclipse.core.runtime.SafeRunner.handleException(SafeRunner.java:75)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:44)
at org.eclipse.ui.internal.Workbench$54.run(Workbench.java:2412)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
...

.metadata 아래에서 다음 경로의 .snap과 workbench.xmi file을 삭제하고 다시 eclipse를 시작해 본다.

rm .metadata/.plugins/org.eclipse.core.resources/.snap .metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

[Tip] PyDev plugin 설치후 동작하지 않을 때

Ubuntu용 Eclipse에 PyDev를 설치하고 program을 재실행 했는데도 *.py 확장자가 인식되지 않고 실행과 디버깅 메뉴에도  Python 항목이 나타나지 않는 것은 PyDev가 3.0 버전 부터는 Java7를 요구하기 때문이었다. (참조 기사)

pydev_py_file_not_recognized

같은 서버에서 Android를 build하고 있어서 Oracle JDK version을 올릴 수는 없기 때문에 옆에서 놀고 있던 Open JDK의 version을 7로 올려서 설정하기로 했다.

Open JDK는 Ubuntu software center에서 설치할 수 있고, eclipse.ini file을 편집해서 사용할 VM을 이것으로 지정해 주면 된다. 

...
-vm
/usr/lib/jvm/java-7-openjdk-amd64/bin/java
...