首頁 > 軟體

如何使用Android Studio開發/偵錯Android原始碼

2020-06-16 18:02:03

本文是以原始碼中development/tools/idegen/README作為指導文件.

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

由於AS是基於IntelliJ IDEA開發的,所以本文也適用於IntelliJ IDEA 

一、修改Android Studio(以下簡稱AS)的記憶體設定

因為在匯入原始碼時需要消耗大量記憶體,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)-Xms-Xmx的值。文件中使用的是748m, 可自行修改。

 二、設定AS的JDK、SDK

IDE中新增一個沒有classpathJDK, 這樣可以確保使用原始碼裡的庫檔案

 

並將其作為要使用的SDK的Java SDK。如下圖

三、生成匯入AS所需組態檔(*.ipr)

①編譯原始碼(為了確保生成了.java檔案,如R.java;如果編譯過,則無需再次編譯)

②檢查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" />

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

④在AS中開啟原始碼根目錄下新生成的android.ipr

如果在匯入時AS出現

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

四、解決原始碼中跳轉錯誤問題

①為當前工程設定正確的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時可能會顯示成:

沒有關係,只是顯示問題,點選OK還是會把frameworks路徑新增進去的.

如果還有程式碼跳轉錯誤,請仿照上面的步驟將相應程式碼的路徑或jar檔案新增到其Dependencies分頁中即可.

五、DEBUG原始碼

我們可以通過給剛匯入的工程在'Modules'中新增'Android Framework'來讓AS將它作為一個Android工程,從而方便我們偵錯程式碼.

可以按照上圖中'1'和'2'來新增Android Framework支援.

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

在彈出的選擇進程(Choose Process)對話方塊中,勾選顯示所有進程,選擇要DEBUG的程式碼所在的進程,點選OK即可.

六、其它

程式碼中很多地方提示Call requires API Level x.... 出現這個問題是因為AS將我們的工程當做安卓應用程式工程了,且原始碼中沒有指定minSdkVersion.

我們只需在原始碼根目錄加一個宣告minSdkVersionAndroidManifest.xml檔案即可(分享了一個AndroidManifest.xml)。

也可以考慮使用build.gradle來解決該問題。 

文中所使用的檔案地址:

------------------------------------------分割線------------------------------------------

免費下載地址在 http://linux.linuxidc.com/

使用者名稱與密碼都是www.linuxidc.com

具體下載目錄在 /2015年資料/4月/19日/如何使用Android Studio開發&偵錯Android原始碼/

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割線------------------------------------------

Ubuntu 12.04(64位元)安裝Android Studio 全過程 http://www.linuxidc.com/Linux/2013-05/84812.htm 

Android Studio v0.1嘗鮮 http://www.linuxidc.com/Linux/2013-05/84681.htm 

Android Studio使用教學 http://www.linuxidc.com/Linux/2013-05/84579.htm 

Android Studio開發指南 http://www.linuxidc.com/Linux/2013-05/84543.htm 

Android Studio設定主題 和 不支援中文的問題解決方法 http://www.linuxidc.com/Linux/2013-05/84488.htm 

Android Studio 下載安裝以及不能開啟的解決辦法 http://www.linuxidc.com/Linux/2013-05/84409.htm 

Android Studio安裝使用圖文教學 http://www.linuxidc.com/Linux/2014-09/106914.htm 


IT145.com E-mail:sddin#qq.com