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


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

Posted by 에코지오
,