Android源碼的編輯和調(diào)試和Android Studio沒什么關(guān)系,一個是系統(tǒng)源代碼,一個是用于應(yīng)用開發(fā)的集成工具。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),無極企業(yè)網(wǎng)站建設(shè),無極品牌網(wǎng)站建設(shè),網(wǎng)站定制,無極網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,無極網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
Android Studio是利用SDK框架開發(fā)運行于Android系統(tǒng)的應(yīng)用程序的一個代碼編輯工具,編寫的程序是運行在裝有Android系統(tǒng)的設(shè)備或者Android虛擬機上運行的,這個家伙搞出來的都是應(yīng)用,跟系統(tǒng)源碼沒什么關(guān)系。
Android源碼是一個復(fù)雜的代碼包,沒有調(diào)試的概念,需要驗證就是linux下make,這個需要搭建基于linux系統(tǒng)的編譯環(huán)境,然后生成系統(tǒng)包,用燒錄工具寫到硬件設(shè)備上,開啟設(shè)備用串口調(diào)試,這個完全是系統(tǒng)層上的東西,跟androidstudio那個編寫應(yīng)用的工具沒一毛錢關(guān)系。源碼編輯一般都是直接用vim看,也有用記事本類的東西。這里邊搞的代碼,也不只是java的,c++的,xml的,還有什么都不是的腳本什么的。
一、修改Android Studio(以下簡稱AS)的內(nèi)存配置
因為在導(dǎo)入源碼時需要消耗大量內(nèi)存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼里的庫文件
三、生成導(dǎo)入AS所需配置文件(*.ipr)
①編譯源碼(為了確保生成了.java文件,如R.java;如果編譯過,則無需再次編譯)
②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar
如果idegen.jar不存在,執(zhí)行:
mmm development/tools/idegen/
在5.0.1的源碼中會生成res.java的文件夾,導(dǎo)致idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹造成的。
我的分享里有修改這個bug的patch,或者直接使用我分享的idegen.jar。
③執(zhí)行
development/tools/idegen/idegen.sh
等待出現(xiàn)類似下面的結(jié)果:
Read excludes: 5ms
Traversed tree: 44078ms
這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基于IntelliJ IDEA社區(qū)版開發(fā)的)的配置文件
④在AS中打開源碼根目錄下新生成的android.ipr
四、解決源碼中跳轉(zhuǎn)錯誤問題
①為當(dāng)前工程設(shè)置正確的SDK和JDK
②設(shè)置'Modules'的依賴
先將所有依賴刪掉,只留下上圖'1'所指向的兩個(注意:這里刪除全部只是為了方便。如果確實用到了.jar,在將它們的路徑添加進來就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
點擊上圖中'2'指向的'+'并選擇上圖'3'指向的'Jars or directories'選項,依次將frameworks和external文件夾添加進來
五、DEBUG源碼
可以通過給剛導(dǎo)入的工程在'Modules'中添加'Android Framework'來讓AS將它作為一個Android工程,從而方便調(diào)試代碼.
在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.
六、其它
代碼中很多地方提示Call requires API Level x.... 出現(xiàn)這個問題是因為AS將工程當(dāng)做安卓應(yīng)用程序工程了,且源碼中沒有指定minSdkVersion.
只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。
也可以考慮使用build.gradle來解決該問題。
用eclipse?+?ADT作為android開發(fā)工具,?可以說是很方便的,在HelloActivity小程序里我們就感覺到eclipse功能的強大。那么,我們可以用?eclipse來開發(fā)android源碼嗎?如果我們直接把android源碼里一個工程導(dǎo)入eclipse,一般來說都會出現(xiàn)錯誤,說許多類庫(包)找?不到。
今天找到關(guān)于怎樣使用eclipse來開發(fā)android源碼的官方文檔:
e7?V/?[:?]!?l*?P+?n0?`
從該文檔和實踐可以總結(jié)出幾點:0?J*?f"?t:?q/?i?c
1、可以使用eclipse來編輯JAVA程序、檢查錯誤(主要是類庫包含和語法方面),但是不能在eclipse上編譯運行android源碼,還是得在shell中make(或mm或mmm)
2、android源碼文件夾里提供有一些eclipse配置文件,.?n;?`4?E)?z5?B8?G6?V,?z1?x2?a
.claapath:eclipse工程的配置文件,方便我們直接把android源碼相應(yīng)的文件和JAVA包導(dǎo)入工程#??%?B9?J,?m!?t%?n0?t*?B9?P'??;?{
android-formatting.xml和android.importorder:這個很重要,主要是用來規(guī)范我們的編碼風(fēng)格,更容易使我們的代碼風(fēng)格一致
3、把android源碼作為一個工程導(dǎo)入eclipse時,必須注意兩點
1)、新建的工程必須是java?project,不能是android?project,否則會破壞android源碼(一般是多添加文件/文件夾)
2)、導(dǎo)入前最好檢查.classpath里的文件在android源碼中是否有相應(yīng)的文件(文件夾),否則也會破壞android源碼(一般是多添加文件/文件夾)
總的來說:!?P"?A+?~'?]%?p9?I5?U7?V;?S;?B
1、用eclipse來編輯代碼、檢查錯誤
2、不在eclipse上編譯、運行android源碼程序,只能在命令行通過make(或mm或mmm)編譯android源碼
3、可以在eclipse上調(diào)試android源碼程序(原理:eclipse通過ddms服務(wù)器在emulator上進行調(diào)試),并可以單步調(diào)試、斷點調(diào)試。
下面,從官方文檔總結(jié)出具體怎樣用eclipse來開發(fā)android源碼
1、建立基本的android開發(fā)環(huán)境3?{#??0?q:?D?k#?k)?\$?R
請參考官方文檔或
2、編譯android源碼
android源碼根目錄下通過make進行編譯,請注意一些配置,具體可參考
3、把eclipse工程配置文件復(fù)制到android源碼根目錄下
cp?development/ide/eclipse/.classpath?./
chmod?u+w?.classpath?#?Make?the?copy?writable
4、修改eclipse程序的配置
1)、修改eclipse緩存設(shè)置
把eclipse.ini(在eclipse軟件的安裝目錄下)的3個值改為下面的值:
-Xms128m/?i2?t!?A4?p!?Z%?V/?q#?o"?J
-Xmx512m;?J??z8?E.?@'?z'?D'?D3?W
-XX:MaxPermSize=256m
2)、把android-formatting.xml和android.importorder導(dǎo)入eclipse
android-formatting.xml、.classpath和android.importorder都放在development/ide/eclipse/下
android-formatting.xml用來配置eclipse編輯器的代碼風(fēng)格;android.importorder用來配置eclipse的import的順序和結(jié)構(gòu)。(?S8?q$?p'?T*?x"?\/?H7?a
在window-preferences-java-Code?style-Formatter中導(dǎo)入android-formatting.xml+?X"?y*?b!?N$?m
在window-preferences-java-Code?style-Organize?Imports中導(dǎo)入android.importorder#?F??d5?X"?H.?X
3)、安裝anyedit插件(可選)#?G9?C;?h/?Z?q5?D!?s8?z7?y9?_
在下載并導(dǎo)入eclipse中+?J.?X#?@5??3?r3?U
5、把android源碼作為一個工程導(dǎo)入eclipse
導(dǎo)入前先檢查.classpath里的文件在android源碼中是否有相應(yīng)的文件(文件夾),否則也會破壞android源碼(一般是多添加文件/文件夾),.classpath里多余的路徑可刪除-?]!?U4?n$?@:?~9?b+?A1?|-?z
新建Java?Project(不是android?project,否則會破壞android源碼),選擇從已存在的工程導(dǎo)入,工程名任意,完成。
導(dǎo)入時,eclipse要build工程,比較慢。導(dǎo)完后,一般都沒有錯誤。"?B(?U??i%?w#?w*?y4?]
6、eclipse上調(diào)試android里的程序。
先執(zhí)行:$?K+?H,?r.?},?v.?_??U5?q'?x?~,?I
cd?android源碼目錄
.?build/envsetup.sh
lunch?1?#?to?build?the?emulator
emulator??#?you?should?see?a?GUI?picture?of?a?phone$?q-?{/?n6?z+?{.?k0?O?I0?\-?p
ddms??#?you?should?get?a?splufty?debugging?console
然后在eclipse中配置調(diào)試類型和端口:5?z8?t(?q*?A+?o-?g7?L#?_
在Run-Debug?Configurations-Remote?java?application上雙擊,然后,”Host:”設(shè)為localhost,”Port:”設(shè)為8700,”Connection?Type”為Standard(Socket?Attach)
然后“Apply”-?Q7?I(?\8?v4?B??A9?R/?Q?u
注意,在點擊”Debug”時苦出錯,說8700端口被占用,那么把DDMS程序關(guān)掉,重新打開DDMS就OK了。如果提供連不到VM錯誤時,請注意,要先在DDMS中選中某一進程(對應(yīng)某一應(yīng)用程序),才能在eclipse執(zhí)行?Debug。.?B%?\*?E!?T,?K7?N8?U??b
在eclipse調(diào)試時,可以設(shè)斷點、單步調(diào)試。估計google團隊也是這樣開發(fā)、調(diào)試android應(yīng)用程序的?X:?n6?t"?|%?B4?E
7、編譯android源碼2??:?`9?i0?O1?U;?E*?|+?Z'?]/?r
執(zhí)行:
cd?android源碼目錄0?v1?Z;?p1?P0?|$?V6?x5?A.?@$?S2?o7?p
.?build/envsetup.sh$?R!?h!?^-?l/?l:?i5?P
那么就會多出mm/mmm等命令,mm/mmm用來編譯模塊(包括C、C++、JAVA程序)。我們也可以直接在?android源碼根目錄下執(zhí)行“make?模塊名”來編譯模塊。
來自開源中國網(wǎng)老槍的分享
創(chuàng)建文件 IMyApiService
文件路徑 frameworks/base/core/java/android/os/
定義了一個計算和的方法。
在frameworks/base/Android.mk
LOCAL_SRC_FILES最后加入
創(chuàng)建文件 MyApiService.java
文件路徑 frameworks/base/core/java/com/android/server/
實現(xiàn)aidl的接口,計算參數(shù)和。
(1)Context添加服務(wù)名
文件路徑 frameworks/base/core/java/android/content/Context.java
添加
(2)添加啟動服務(wù)
文件路徑 frameworks/base/services/java/com/android/server/SystemServer.java
在startOtherServices方法中添加
創(chuàng)建 MyApiManager.java文件
文件路徑 frameworks/base/core/java/android/app/
文件路徑 frameworks/base/core/java/android/app/ContextImpl
添加registerService
記住make update-api
編譯打包完成后,燒寫新的固件。
jar主要為了在android studio編譯環(huán)境中MyApiManager報錯導(dǎo)致編譯不通過問題。
也可以導(dǎo)入frameworks jar包或使用反射。
在源碼目錄packages/app下新建MyJar文件夾
并新建目錄com/myapi/(包名)
在目錄com/myapi/新建文件MyApi.java
具體Android.mk語法這里不做解釋,可以自行查閱
在MyApi目錄下直接運行mm編譯命令(記得先source build/envsetup.sh)
待編譯完成后,jar生成目錄
out/target/common/obj/JAVA_LIBRARIES/Myapi_intermediates/javalib.jar
可更改為其他名稱。