Android Eclipse 源碼工程 調試

來源:互聯網
上載者:User
一、搭建Eclipse源碼工程

1、 進入源碼目錄下的development/ide/eclipse,把android-formatting.xml
,android.importorder , .classpath拷貝到源碼目錄

Eclipse需要一個目錄列表來搜尋Java檔案,稱作"Java
Build Path”,儲存在.classpath檔案中【eclipse工程的設定檔,方便我們直接把android源碼相應的檔案和JAVA包匯入工程】

匯入development/ide/eclipse下的檔案,讓Eclipse遵從Android的編碼風格:

2、 chmod +x .classpath 賦予執行許可權

3、在eclipse工程菜單
window-->preferences-->java-->Code Style-->Formatter 匯入android-  formatting.xml檔案,organize imports匯入android.importorder檔案

4、 建立一個java工程,匯入android源碼

必須注意兩點:

  1)、建立的工程必須是java project,不能是android project,否則會破壞android源碼(一般是多添加檔案/檔案夾)。

  2)、匯入前最好檢查.classpath裡的檔案在android源碼中是否有相應的檔案(檔案夾),否則也會破壞android源碼(一般是多添加檔案/檔案夾)。

總的來說:

  1、用eclipse來編輯代碼、檢查錯誤。

  2、不在eclipse上編譯、運行android源碼程式,只能在命令列通過make(或mm或mmm)編譯android源碼。

  3、可以在eclipse上調試android源碼程式(原理:eclipse通過ddms伺服器在emulator上進行調試),並可以單步調試、斷點調試。

5、 修改eclipse配置,eclipse目錄下的eclipse.ini檔案,修改-Xms,-Xmx為128和512
        -Xms128m
        -Xmx512m

Android工程很大,在編譯時間可能造成Eclipse的Java虛擬機器記憶體耗光。我們可以通過修改eclipse.ini避免這一問題,在ubuntu下,eclipse.ini位於eclipse所在目錄

二、調試android源碼

1. 退出Eclipse工程
2. 在android源碼目錄執行  . build/envsetup.sh ,初始化環境變數  【lunch 1   # to build the emulator】
3. 啟動模擬器 emulator &【 you should see a GUI picture of a phone】
4. 等模擬器啟動成功後,啟動ddms   ddms & 【 you should get a splufty debugging console】

5. 在ddms上選擇你需要調試的進程,一般如果是調試系統內建的應用,比如連絡人,選中下面進程

6. 開啟Eclipse工程,設定調試連接埠

    選擇你的工程,右鍵開啟菜單選擇 Debug AS—Debug configuration 快顯視窗,選擇Remote JAVA Application,右鍵在菜單選擇NEW,彈出下面的視圖,修改Port為8700

7.debug後在選擇的進程上面如果出現了 ,則表示成功進入調試了。

8、比如:調試撥打到電話的功能

在DDMS上選擇com.android.phone這個進程

找到frameworks/base/telephoney/java目錄下的com.android.internal.telephony包,然後找到RIL.java檔案。

在函數 public void dial(String address, int clirMode, UUSInfo uusInfo, Message result)中設定斷點

然後在模擬器中撥打到電話,便可以在設定的斷點處停下,進行查看變數等操作。

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

出現的問題:

Project 'gingerbread' is missing required library: 'out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar'
Project 'gingerbread' is missing required library: 'out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar'

解決:
刪除.classpath中的這兩行路徑
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar"/>
添加
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>

<classpathentry
kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/filterfw_intermediates/classes-jarjar.jar"/>

<classpathentry
kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-support-v13_intermediates/classes-jarjar.jar"/>

簡要說明:

在以往的調試經驗中,讀者習慣於使用Eclipse命令菜單run/debug來調試一個獨立的Android應用程式,而Framework並不是一個應用程式,那麼如何調試呢?下面做幾點說明:

      1、Android的Framework雖然是Android的核心,但其內部也包含一個應用程式,其名稱為:system_process,其對應的TCP連接埠地址一般為:8600,因此也可以對該程式進行調試。

      2、Framework中包含的SDK源碼在程式空間中只有一份副本,但是每個應用程式都會調用這部分程式,調用時,該代碼是在應用程式所在的使用者進程中啟動並執行。

      基於以上2點,理論上可以對普通應用程式進行調試,並將Android SDK中的源碼附屬到偵錯工具中,那麼就可以單步調試到Framework的源碼了。另一方面,也可以單獨對system_process進行調試。

下面描述3個調試執行個體:

一、普通應用程式調試:

      使用功能表命令run/debug,當調試到需要調用Framework代碼的地方,eclipse會提示找不到所需的代碼,此時,可以在提示頁面上單擊“Attach Source...”按鈕,並指到我們Android源碼目錄,其作用就是將Android中的源檔案作為SDK中android.jar的源碼,從而就可以單步運行到相應的Framework源碼中了。

二、系統應用程式調試:

      以packages/app/Contacts項目為例,該項目中引用了Framework中的一些特別類,這些類在預設情況下並沒有被包含到SDK中的android.jar包中,因此Eclipse下無法直接編譯該項目並產生Contacts.apk。要產生Contacts.apk可以有2種方法:1、把Contacts項目中所需要的特別檔案打包成一個jar包,並把該jar包包含到Contacts項目中,從而就可以直接在Eclipse中編譯出Contacts.apk,另一種方法是直接在Terminal中使用make
Contacts命令編譯出Contacts.apk,一般多採用後一種方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.