如何使用Android Studio開發/調試Android源碼

本文是以源碼中development/tools/idegen/README做爲指導文檔.java

環境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源碼linux

因爲AS是基於IntelliJ IDEA開發的,因此本文也適用於IntelliJ IDEAandroid

 

1、修改Android Studio(如下簡稱AS)的內存配置ide

由於在導入源碼時須要消耗大量內存,因此先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)-Xms-Xmx的值。文檔中使用的是748m, 可自行修改。gradle

 2、配置AS的JDK、SDKui

IDE中添加一個沒有classpathJDK, 這樣能夠確保使用源碼裏的庫文件url

 

並將其做爲要使用的SDK的Java SDK。以下圖spa

3、生成導入AS所需配置文件(*.ipr)debug

①編譯源碼(爲了確保生成了.java文件,如R.java;若是編譯過,則無需再次編譯)3d

②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar

若是idegen.jar不存在,執行:

mmm development/tools/idegen/

在5.0.1的源碼中會生成res.java的文件夾,致使idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹形成的。

個人分享裏有修改這個bug的patch,或者直接使用我分享的idegen.jar。

③執行

development/tools/idegen/idegen.sh

等待出現相似下面的結果:

Read excludes: 5ms
Traversed tree: 44078ms

這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基於IntelliJ IDEA社區版開發的)的配置文件

Tips:

AS在導入代碼時比較慢,建議先修改android.iml,將本身用不到的代碼exclude出去.能夠仿照過濾.repo文件夾的語法,如:

<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />

刪除掉全部不須要的module-library項 PS:感謝 @dezng 的建議

這樣在導入時就會跳過abi和art文件夾.過濾的越多,AS的處理速度就會越快.

④在AS中打開源碼根目錄下新生成的android.ipr

若是在導入時AS出現

 則建議按照其給定的解決方法來解決(網址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit),具體內容以下圖:

4、解決源碼中跳轉錯誤問題

①爲當前工程設置正確的SDK和JDK

②設置'Modules'的依賴

先將全部依賴刪掉,只留下上圖'1'所指向的兩個(注意:這裏刪除所有隻是爲了方便。若是確實用到了.jar,在將它們的路徑添加進來就能夠了.

如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)

點擊上圖中'2'指向的'+'並選擇上圖'3'指向的'Jars or directories'選項,依次將frameworks和external文件夾添加進來.如:

注:推薦把frameworks和external這兩個移到最上面,這樣在代碼跳轉時會優先從這兩個文件夾下查找,而不是在Android.jar中查找。

其它版本的代碼在添加frameworks時可能會顯示成:

沒有關係,只是顯示問題,點擊OK仍是會把frameworks路徑添加進去的.

若是還有代碼跳轉錯誤,請仿照上面的步驟將相應代碼的路徑或jar文件添加到其Dependencies標籤頁中便可.

5、DEBUG源碼

咱們能夠經過給剛導入的工程在'Modules'中添加'Android Framework'來讓AS將它做爲一個Android工程,從而方便咱們調試代碼.

能夠按照上圖中'1'和'2'來添加Android Framework支持.

在代碼中加斷點,而後選擇'Run'->'Attach debugger to Android process'或者直接點擊下圖所示的圖標

在彈出的選擇進程(Choose Process)對話框中,勾選顯示全部進程,選擇要DEBUG的代碼所在的進程,點擊OK便可.

6、其它

代碼中不少地方提示Call requires API Level x.... 出現這個問題是由於AS將咱們的工程當作安卓應用程序工程了,且源碼中沒有指定minSdkVersion.

咱們只需在源碼根目錄加一個聲明minSdkVersionAndroidManifest.xml文件便可(分享了一個AndroidManifest.xml)。

也能夠考慮使用build.gradle來解決該問題。

 

文中所使用的文件地址:http://yunpan.cn/cf3MBa2688eBw (提取碼: 64e5)

相關文章
相關標籤/搜索