지난 글에서는 로컬의 네이티브 애플리케이션 소스를 이클립스를 통해 쉽게 디버깅할 수 있도록, 에뮬레이터에 내장된 것과 동일한 키로 서명하는 방법을 알아봤습니다. 그러나 굳이 내장된 것과 동일하게 서명하지 않고(즉 Custom Debug Keystore를 만들지 않고) 로컬 네이티브 애플리케이션을 디버깅할 수 있습니다. 

(1) 내장된 애플리케이션을 설치 제거하거나(uninstall)

(2) 내장된 패키지(apk) 파일을 내가 빌드한 apk 파일로 덮어쓴 후(overwrite)

그러고 나서 이클립스에서 Debug As로 디버깅하면 됩니다.

1. 네이티브 애플리케이션 uninstall하기

에뮬레이터에서 기존 네이티브 애플리케이션을 설치제거(uninstall)합니다. 

# 그냥 언인스톨하면 안됩니다
$ adb uninstall com.android.calculator2
Failure

# 아직 rm으로 파일을 삭제할 수 없습니다
$ adb shell rm /system/app/Calculator.apk
rm failed for /system/app/Calculator.apk, Read-only file system

# remount는 /system 파티션을 ro(read-only)에서 rw(read-write)로 바꿉니다
$ adb remount

# 이제 rm으로 apk를 삭제하고 uninstall합니다
$ adb shell rm /system/app/Calculator.apk
$ adb uninstall com.android.calculator2

Success

# 기존 데이터를 보존하고 uninstall하려면 -k 옵션 추가
$ adb shell pm uninstall -k com.android.calculator2

▶ 네이티브 애플리케이션 제거 순서 요약 : remount => remove apk => uninstall 


2. 또는 네이티브 패키지 파일을 덮어쓰기

내장된 애플리케이션 패키지 파일(apk)을 로컬에서 빌드된 파일로 강제로 덮어씌우고 디버깅할 수 있습니다.

# remount는 /system 파티션을 ro(read-only)에서 rw(read-write)로 바꿉니다
$ adb remount

# 내장된 apk를 로컬 apk로 overwrite합니다
$ adb push C:\Calculator\bin\Calculator.apk /system/app


이클립스에서 Debug As 실행

내장된 애플리케이션을 언인스톨하거나 로컬 패키지 파일로 덮어쓴 후에 이클립스에서 [프로젝트 오른 클릭 > Debug As > Android Application]을 실행합니다. 이제 로컬에서 빌드된 네이티브 애플리케이션이 타겟에 새롭게 설치되면서 소스를 디버깅할 수 있습니다. (이 경우 apk는 /data/app에 설치됩니다. /system/app에 설치되지 않습니다)


별거 없네요. 어때요? 참, 쉽죠? ^^

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 에코지오

댓글을 달아 주세요

  1. ... 2012.05.24 14:58 신고  댓글주소  수정/삭제  댓글쓰기

    루팅을 해야하는건가요??

네이티브 애플리케이션 소스를 수정하여 컴파일, 테스트, 디버깅해야 할 경우가 있습니다. 주로 제조사에서 그런 작업을 합니다. 네이티브 애플리케이션 커스터마이징을 위해 제일 먼저 할 일은 당연히 이클립스에 네이티브 애플리케이션 프로젝트를 구성하는 것입니다. 이클립스 환경에서 네이티브 앱을 빌드하는 방법을 알아보죠.

1. 일단 안드로이드 소스 저장소(http://android.git.kernel.org/)에서 해당 네이티브 애플리케이션 소스를 다운받습니다. snapshot 링크를 클릭하면 압축파일로 한번에 쉽게 다운로드 받을 수 있습니다. 



2. 압축을 풀고 이클립스에서 새로운 Android Project로 구성합니다. 생성 마법사에서 Android Project 선택 후 Create project from existing source 선택하여 소스 경로를 설정합니다.



3. 다행히 Calculator 처럼 공개된 안드로이드 프레임워크 API(android.jar)만 사용하는 애플리케이션이라면 일반적인 유저 애플리케이션처럼 큰 문제 없이 잘 빌드됩니다.


4. 그러나 Contacts 처럼 숨겨진 프레임워크 API에 의존하는 경우 android.jar 만으로는 컴파일 자체가 안됩니다. Contacts는 안드로이드 풀소스 빌드 과정에서 중간 결과물로 생성되는 classes.jar 등에 의존하고 있는데, 이런 경우는 짤없이 안드로이드 전체 소스를 다운받아 몇 십분~몇 시간 걸리는 full 빌드를 우분투 환경에서 한번은 해줘야 합니다. 


android.jar 외에 어떤 jar 파일을 빌드패스에 추가할 지는 Android.mk 파일 등을 참조하여 판단하면 됩니다.

좀 더 자세한 설명은 다음 링크를 참조하세요.
http://www.kandroid.org/board/board.php?board=androidsource&command=body&no=64


* 전체 네이티브 패키지(애플리케이션, 프로바이더 등)를 이클립스를 이용하여 한꺼번에 빌드하기 위한 세팅은 다음 링크를 참조합니다.

http://source.android.com/using-eclipse
http://blog.naver.com/jang2818?Redirect=Log&logNo=20078863663



신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 에코지오

댓글을 달아 주세요

  1. 김태호 2011.05.27 16:29 신고  댓글주소  수정/삭제  댓글쓰기

    뽀로로가 타고 있어요 ㅎㅎ

  2. 윈도우 2012.07.01 19:36 신고  댓글주소  수정/삭제  댓글쓰기

    윈도우 환경에서는 빌드할 수 없나요??

    우분투 사용하니 에러가 있어서요...


네이티브 애플리케이션(Native Application)

  • 내장 애플리케이션(Built-in Application) 또는 시스템 애플리케이션(System Application) 등으로 불림
  • 주로 제조사에서 개발되어, 디바이스(or 에뮬레이터)에 내장된 상태로 제공됨
  • Contacts, Browser, Phone, Camera, Email, Gallery 등(전체 목록은 안드로이드 풀소스의 packages 디렉토리 참조)
  • 디바이스의 /system/app에 설치됨 : ex) /system/app/Contacts.apk
  • 보통 안드로이드 full 소스 빌드시 함께 빌드되며 이 과정에서 별도의 인증서로 서명됨
  • 네이티브 애플리케이션을 디버그 모드로 서명하기 위한 인증서들은 MYDROID/build/target/product/security에 있음


유저 애플리케이션(User Application)

  • 일반적으로 이클립스 IDE 환경에서 새로운 Android Application 프로젝트로 개발되는 애플리케이션들임
  • 사용자에 의해 다운로드되어 설치됨
  • 디바이스의 /data/app에 [패키지명].apk 형태로 설치됨 : ex) /data/app/com.mycompany.myapp.apk
  • 대개 개발/테스트 단계에서는 이클립스 ADT플러그인이 생성해주는 Default Debug Keystore로 서명됨
  • Default Debug Keystore 파일 : USERHOME/.android/debug.keystore
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 에코지오

댓글을 달아 주세요



티스토리 툴바