컴퓨터 지식 네트워크 - 컴퓨터 백과사전 - Android 프레임워크 소스 코드를 디버그하고 추적하는 방법

Android 프레임워크 소스 코드를 디버그하고 추적하는 방법

이 기사에서는 Eclipse에서 Android 소스 코드(Framework 및 Application 코드 포함)를 가져온 후 시뮬레이터나 실제 머신을 통해 Android Java 코드를 추적/디버깅하는 방법을 설명합니다. 이는 일반 순수 애플리케이션 기반과는 다릅니다. Android SDK 개발의 경우 여기에서 프레임워크의 코드를 추적/디버깅할 수 있습니다.

1. 준비

다음 소프트웨어 환경이 머신에 설치 및 구성되어 있는지 확인하세요: JDK/Eclipse/Android SDK/ADT

, 머신이 설치되었습니다. Eclipse에서 Android 애플리케이션 개발에 필요한 환경을 이해합니다. 아직 구성되지 않은 경우 "Windows에서 Android 애플리케이션 개발 환경 구축 - Eclipse/Android/ADT"로 이동하세요.

또한 Android 소스 코드를 추적하고 디버그하려면 Android 소스 코드와 소스 코드에 대한 컴파일 환경도 있어야 합니다.

가상 머신 환경 Linux 컴파일 Android 소스 코드 아래 가상 머신에 Linux를 설치합니다. 이 환경에서는 호스트 머신의 Eclipse에서 디버깅을 하려면 호스트 머신이 접근할 수 있도록 안드로이드 소스 코드 경로도 공유해야 합니다.

이를 수행할 수 있는 별도의 네트워크 환경이 있습니다. Android를 컴파일합니다. 클라이언트 컴퓨터에서 서버가 공유하는 Android 소스 코드 경로에 액세스합니다.

Linux 환경에서는 Eclipse를 통해 컴퓨터에서 Android 소스 코드를 직접 추적하고 디버깅할 수 있습니다.

참고: 어떤 작업 방법에 관계없이 Android 소스 코드가 컴파일되어야 하며 컴파일 중에 Eng 모드(대 사용자 모드)가 사용됩니다. Android 플랫폼과 커널을 컴파일하는 과정은 "Ubuntu 10.10에서 Android 2.2 플랫폼 컴파일"과 "Ubuntu 10.10에서 Android 2.2 커널 컴파일"을 참조하세요.

2. 기본 설정

준비가 완료되었으면 이제 기본 설정을 해주세요.

1. Android 소스 코드 경로 아래의 development\ide\eclipse에 있는 .classpath 파일을 로 복사합니다. 구체적인 방법은 /view/26d9063c87c24028915fc366.html을 참조하세요)

2. Eclipse 설정 수정

eclipse.ini 파일을 수정하고 다음 내용을 변경합니다.

[일반 ]?view plaincopy

-Xms40m?

-Xmx384m?

다음으로 변경됨:

[java]?view plaincopy< /p >

-Xms128m?

-Xmx512m?

여기서 최소 Java 힙 크기를 128MB로 늘리고 최대 Java 힙 크기를 512MB로 늘립니다.

3. Eclipse에서 프로젝트 생성

1. 파일 > 새로 만들기 > Java 프로젝트

2. 프로젝트 이름을 입력하세요. . 취소 기본 위치를 사용하고 위치에 Android 소스 코드 경로

를 입력하거나 선택합니다. 오랜 대기 시간이 소요됩니다.

새로 생성된 프로젝트에 오류가 있을 수 있으며, 오류 메시지에 따라 프로젝트에 구성된 패키지를 추가하거나 삭제하세요.

4. 디버그 환경 구성

1. 3번에서 방금 생성한 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다.

2. Debug As > Debug Configurations…를 선택합니다.

3. "원격 Java 애플리케이션"을 마우스 오른쪽 버튼으로 클릭하고 새로 만들기를 선택합니다. 또는 "원격 Java 애플리케이션"을 직접 두 번 클릭하여 새 원격 애플리케이션을 생성합니다.

4. 이름을 입력하고 프로젝트에 대해 방금 생성된 프로젝트 Android2.3.7을 선택합니다. 포트에 8700을 입력합니다(반드시 8700일 필요는 없습니다. 필요한 포트 번호를 보려면 DDMS Perspective 아래의 장치 보기로 이동하세요). ).

5. 적용하고 저장하고 종료합니다.

5. 디버깅

시뮬레이터나 실제 머신을 통해 디버깅할 수 있습니다.

에뮬레이터이든 실제 머신이든 다음을 수행해야 합니다.

먼저 머신을 시작합니다(시뮬레이터를 시작하거나 실제 머신을 켜고 다음을 통해 정상적으로 PC에 연결합니다). USB), 즉, DDMS Perspective의 Devices 보기에서 머신 연결이 있음을 확인할 수 있습니다.

실행 중인 코드가 디버깅하려는 코드와 동일한지 확인하세요.

잠금 화면을 잠금 해제하기 위해 호출을 추적한다고 가정해 보겠습니다.

우리는 system_process 프로세스에서 실행되는 LockScreen.java의 onGrabbedStateChange() 함수에서 잠금 해제가 구현된다는 것을 알고 있습니다.

그런 다음

1. 디버그하려는 onGrabbedStateChange()에 중단점을 설정합니다.

2. Device View에서 system_process를 선택하고 Small Crawler를 클릭합니다. 아이콘;

3. 섹션#4, 디버그로 생성된 디버그 구성

4. 시뮬레이터 또는 실제 머신에서 잠금 해제 작업이 수행되면 코드가 중지됩니다. 중단점;

따라서

변수 위에 마우스를 올리면 해당 값을 볼 수 있습니다. Eclipse에서 다양한 디버깅 방법을 사용하여 코드를 디버깅할 수도 있습니다.

Step Into / Step Over / Resume / Suspend / Terminate 등을 통해 디버그 보기에서 프로그램 실행을 제어합니다.

요약

이 문서를 통해 다음을 수행할 수 있습니다.

이 문서의 설명은 Windows 환경을 기반으로 하지만 Windows 환경에만 적용되는 것은 아닙니다. 이지만 Mac OS 및 Linux 시스템에도 적용됩니다. 일부 경로와 사용 방법만 다릅니다.

프레임워크의 코드나 Android의 코드에 관계없이 Android의 모든 Java 소스 코드를 추적/디버깅할 수 있습니다. 앱), 하지만 프레임워크에서 c/C++ 코드를 디버깅할 수는 없습니다. ;

Eclipse에서 전체 프로젝트를 컴파일하려면 .classpath에 out/에서 컴파일된 콘텐츠도 포함되어 있습니다. Android 소스 코드가 컴파일되었는지 확인해야 합니다.

추적/디버깅의 전제 조건은 디버깅할 코드에 중단점을 설정하고 해당 코드가 어떤 프로세스에서 실행되는지 아는 것입니다. ================================================= ================================================= ===============

가져온 프로젝트에 오류가 있는 경우 다음 방법을 참고할 수 있습니다.

========================================== === ============================================== === =====================

Android 애플리케이션과 함께 제공되는 프로젝트를 가져올 때 오류가 자주 발생합니다. 내장된 AlarmClock을 예로 들면, Eclipse로 가져온 후 아래 그림과 같이 많은 오류가 발생하는 경우가 많습니다.

예를 들어 위 그림의 Intent.ACTION_ALARM_CHANGED에 접근할 수 없는 것을 찾아보겠습니다. 소스코드를 보면 그 이유는 어디에 있나요?

Java 프로그래밍 사양에 따르면 이 API(정적 변수)가 숨겨져 있어 SDK에서 사용할 수 없는 것으로 알고 있습니다. 이유를 알고 나면 몇 가지 해결책이 있습니다(방법 2 권장):

1. 소스 코드에서 @hide를 직접 제거한 다음 SDK를 컴파일하여 기본 SDK를 대체합니다.

Linux에서 make PRODUCT-sdk-sdk 명령을 사용하여 새 SDK를 컴파일합니다. 컴파일 후에는 실제로 전체 SDK가 필요하지 않습니다. 예를 들어 작성자 SDK의 jar에 해당하는 디렉터리는 다음과 같습니다.

F:/Program Files/Android/android-sdk-windows/platforms/android-8/ android.jar

SDK를 컴파일하는 구체적인 방법은 Linux 컴파일 환경에서 make PRODUCT-sdk-sdk 명령을 사용하는 것입니다. 성공하면 다음 프롬프트가 나타납니다.?

패키지 SDK: out/host/linux-x86 /sdk/android-sdk_eng.stevewang_linux-x86.zip

Linux 컴파일 환경인 out/host/linux-x86/sdk/android-sdk_eng로 들어갑니다. stevewang_linux-x86/platforms/android-2.2 android.jar? 파일은 / 디렉토리에서 볼 수 있습니다. 이 파일을 사용하여 F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar을 바꾸시겠습니까? 교체하기 전에 백업하는 것을 잊지 마세요.

이 방법은 더 번거롭습니다. 2번 방법을 사용하는 것이 좋습니다.

2. 프레임워크에서 컴파일한 class.jar 파일을 Eclipse 빌드 경로에 추가합니다.

실제로 Android를 컴파일할 때 프레임워크를 임시 jar 패키지로 컴파일합니다. 이 jar 패키지의 경로는 일반적으로 다음과 같습니다.

out/target/common/obj/JAVA_LIBRARIES /framework_intermediates/classes.jar

[font='dejavu]이 파일을 생성하려면 Linux의 Android 소스 코드 디렉터리에서 make 명령만 사용하면 됩니다.

[font='dejavu]

[font='dejavu]이 jar 파일의 API는 다시 패키징되지 않았으므로 @hide에 의해 제거된 API는 제거되지 않았습니다. 따라서 우리는

[font='dejavu] 내부에서 @hide API를 계속 참조할 수 있습니다. SDK의 android.jar 파일이 다시 패키징되고 @hide로 표시된 API가 제거되었습니다.

[font='dejavu]그래서 ?out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar을 로컬 PC에 복사합니다.

그런 다음 이 jar 패키지를 프로젝트에 추가하세요.

구체적인 방법:

1. Linux 컴파일로 생성된 ?out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar을 로컬 PC에 복사합니다.

2. Eclipse의 Android 프로젝트에서 프로젝트 속성->Java 빌드 경로->라이브러리->라이브러리 추가->사용자 라이브러리->다음-> UserLibraries를 선택하여 사용자 라이브러리 관리 인터페이스로 들어가고를 클릭합니다. New android_framework와 같은 새 사용자 라이브러리를 생성하고 Add Jars를 클릭하여 생성된 사용자 라이브러리에 Jar 패키지를 추가한 후 마지막으로 확인을 클릭합니다.

3. 프로젝트 속성->Java 빌드 경로->순서 및 내보내기를 선택하고 생성된 사용자 라이브러리를 Android SDK로 이동합니다.

아래와 같이:

그 후 엔지니어링 오류가 사라졌습니다.

上篇: 휴대폰으로 흐릿한 사진을 찍는 방법 下篇: 위챗 상호 작용 활동을 늘리는 방법
관련 내용