標籤:mil module def hone 尋找 dir external cto 應用
環境: Ubuntu 14.10,openJdk 1.7,Android Studio 3.0.0,android-5.1.1_r1源碼
產生android項目工程:
先編譯源碼
mmm development/tools/idegen/
development/tools/idegen/idegen.sh
依次執行完上面的命令,就會在系統根目錄下產生如下檔案
.classpath (Eclipse)
android.ipr (IntelliJ / Android Studio)
android.iml (IntelliJ / Android Studio)
一、修改Android Studio(以下簡稱AS)的記憶體配置
因為在匯入源碼時需要消耗大量記憶體,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼裡的庫檔案
並將其作為要使用的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: 5msTraversed 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),具體內容如:
四、解決源碼中跳轉錯誤問題
①為當前工程設定正確的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標籤頁中即可.
五、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.
我們只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml檔案即可(分享了一個AndroidManifest.xml)。
也可以考慮使用build.gradle來解決該問題。
如何使用Android Studio開發/調試Android源碼