❶ 如何學習android的源代碼
請參考老羅的Android之旅http://blog.csdn.net/luoshengyang/article/details/8923485/
❷ Android Framework源碼中需要學習的類有哪些
handler looper 是如何工作的
touch事件的響應
view的繪制
viewgroup的測量與布局
四大組件常用方法的實現
❸ 有研究android系統源碼的博客嗎
我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。
先說下我的入門過程:
第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。
第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。
第二步,學習linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。
第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。
第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》
第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。
第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。
第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。
第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。
最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。
我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
轉載
❹ Android源碼學習之如何創建使用JNI
publicclassHelloWorld{
();//所有native關鍵詞修飾的都是對本地的聲明
static{
System.loadLibrary("hello");//載入本地庫
}
publicstaticvoidmain(String[]args){
newHelloWorld().displayHelloWorld();
}
}
上面的就是使用JNI的方式,其中so庫的名字是libhello.so,放到libs下面。
jni中的方法需要在修飾符後面加上native,
例如:();,
在使用之前需要導入so庫,
導入方法:
static{
System.loadLibrary("hello");//載入本地庫
}
在導入的時候是可以省略so庫前面的lib的,當然加上也沒事。
還有就是使用的地方一定要在固定的包名類名下。
希望能夠幫助你。
❺ 如何學習 android setting 源碼
我是一名計算機系的大學生,我們是從學習C語言來學習編程的,看譚浩強的那本C語言就行了。不過你的數學基礎的好一點,英語也不能太差了。因為如果知道了那些關鍵字和語句的意思後就比較好理解了。 這本書書店裡應該有,如果你找不到,就乾脆上網上下,多的是。 不過我認為看電子書沒有看紙質的書爽。剛開始的時候你會覺得有點難,不過沒關系,只要你堅持下來,什麼都好說。希望你的學習順利。
❻ android Framework學習步驟是個啥流程
一、閱讀Android源碼的術與道:
1、Android源碼的道
Android的功夫,在Android之外。要想「理解」而非單純的「知道」,想「學習」而非單純的「記誦」。必備基礎:信息檢索能力、編程語言(C\C++、Java)、計算機系統知識、設計模式、JVM,多線程設計
2、Android源碼的術
針對每一個模塊本身的職責,詢問更細節的實現,永遠記住,先有的問題,之後才有的代碼。代碼實現是新鮮的,但是有了之前的鋪墊和對問題的預期,它們的出現才是可理解的。
總結:先理解模塊對應的要解決的「問題」是什麼,再去給問題找解決方案的思路去理解源碼;
理解源碼的功夫不止在Android本身,也要提高Android之外的姿勢水平。
二、Framework需求開發與維護注意點
1、需求開發
1) 相關功能的現有模塊需要非常熟悉,否則會有非常大的風險
2 )所寫代碼盡量與已有類似的代碼保持風格一致
3 )必要的注釋,寫代碼的時候認為代碼的意圖貌似是理所當然,但是當別人看你的代碼或者過一段時間你自己查閱代碼的時候,很有可能由於代碼量過大,在代碼的海洋中未必容易理解某一段代碼的意圖
4 )找比自己能力強的,經驗較為豐富的同事review代碼。系統層畢竟是上層應用的基礎,必須保證其極高的穩定性,不像app即使有一些bug可以快速的迭代和發版推送。
2、維護
1 )優秀的代碼設計。Android的代碼加工的順序大致是Google源碼->晶元廠商的修改->OEM廠商的修改。這些代碼里積累了大量世界級優秀的代碼設計方式,架構思想,這樣咱們對代碼的學習和認識的起步就是不低的,所以閱讀大量的代碼過後,我們再嘗試寫代碼的時候,一般也不會寫出低質量的代碼
2 )分析定位的技巧。一個經驗豐富的工程師的價值,主要會體現在遇到問題時,能夠分析定位解決問題的能力和效率,而很少會聽說我這有個20年經驗的工程師,他的價值在於別人一個小時能寫成的代碼他在一分鍾就寫出來了。
❼ 如何學習和理解Android系統
我以前是做嵌入式系統開發的,對於平台比較熟,所以我的學習方向是從下往上進行學習,有相同工作經歷者可以效仿一下吧:)個人認為其實就是三大塊,分為移植-框架-應用1、android系統移植 其實這一塊工作主要集成在android linux kernel 的驅動代碼編寫及android系統啟動調試過程 。 對於android-HAL移植代碼編寫,其實android系統需要移植的模塊較少(最精簡的系統啟動),只需要實現libgralloc模塊,這塊就是顯示及顯存分配的代碼以及HDMI的啟動高清輸出。 需要熟練掌握的知識是linux驅動及android系統的啟動過程會干哪些事情。以前寫過相關的linux kernel及android 完整的啟動流程。 只要熟悉清楚這些原理,就是解決啟動過程中的問題,基本上移植android系統不會有太大的問題,只要啟動了原始的android系統後面就是完善及優化系統了。 深入研究過三個平台代碼(海思,ST及博通)的android代碼與原始android系統代碼,基本上都是這么做的。 這里推薦 --- 移植與調試 ,可以對android的外圍設備及相關移植內部有一定的了解,碰到問題多問問google,可能其它朋友也碰到過,當然也可以找你一起討論解決。2、框架層代碼學習 這塊代碼需要熟悉幾個android的幾個重要概念: Binder (IPC通訊), Service 服務 ,Zygote 等等 緊接著就是研究大的模塊代碼,如SurfaceFlinger , AudioFilnger , Media(這塊還一直沒有時間看,很遺憾) 等,下一個計劃就是研究media媒體播放這塊,以前做過本地播放應該會減小很多的學習時間,知識的本質是相通的。 瀏覽器及虛擬機這塊也是個大頭,目前開發沒怎麼用到,所以也沒有去怎麼接觸和了解,說不上好的建議 這里推薦 系統篇,寫的特好,更多的內容見博客,網上很多牛人呀。3、JAVA應用程序 這一塊代碼的編寫,最好的教材就是 android SDK ,這些api有詳細的介紹及用法,與msdn媲美。
網上摘抄。。
❽ 有誰學過android源代碼中SKIA部分內容的我想深入學習SKIA ,不是j簡單JAVA層的調用,最好深入到每個函數
從Honeycomb[3.x]版本起,Andorid便支持GPU加速,但目前Android並沒有使用Skia GPU進行Webkit渲染。Skia GPU使用OpenGL進行後台加速渲染,未來也許會代替Skia。
很多人覺得,即使Android成功使用了GPU加速Webkit渲染,在訪問瀏覽如雅虎等一般的網站時,用戶也感覺不到太大的差異。因為Webkit的資源大多數消耗在了Javascript腳本和布局定位上。
我們覺得Webkit使用GPU加速渲染的最大意義無非是HTML5 Canvas[HTML5的動態繪圖效果]。Android渲染Canvas動畫實在太慢,導致Web開發者根本無法在Android上用Canvas開發網頁游戲[要注意的是,目前很多手機和平板的應用程序以HTML5做為界面,並使用Webkit工作,這也是很多應用在Android系統上感覺「不流暢」的重要因素。譯者注]。
Android Webkit開發平台[NDK]使用Skia GPU加速測試
我們對Android系統使用Skia GPU加速的Webkit進行了測試。我們手上已經有Android Webkit NDK的WAC2.0版本,我使用了某個提交版本的Skia源碼,並開啟Skia GPU加速將其編譯進NDK中。
我並沒有使用Canvas加速,因為這還要增加修改GraphicsContextSkia API的工作,所以並未測試Canvas渲染的性能。
❾ Android源碼該如何學習
直接沒目的的學習Android源碼效果並不好,建議設計一系列的任務,帶著任務學習源碼。比如:
1. 編譯並且燒錄到開發板中去
2. 嘗試分析、統計和優化系統的啟動速度
3. 在源碼中添加新的APP,或者嘗試刪除系統出廠的APP
4. 在源碼層編寫一些應用,如自定義鎖屏、底層Camera應用或者Audio應用
5. 嘗試編寫一個HAL層驅動
6. 嘗試移植系統到其他開發板上去
❿ 如何正確學習android源代碼
1、避免建立對象
世界上沒有免費的對象。雖然GC為每個線程都建立了臨時對象池,可以使創建對象的代價變得小一些,但是分配內存永遠都比不分配內存的代價大。
如果你在用戶界面循環中分配對象內存,就會引發周期性的垃圾回收,用戶就會覺得界面像打嗝一樣一頓一頓的。
2、使用本地方法
當你在處理字串的時候,不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊實現的方法。這些方法都是使用C/C++實現的,比起Java循環快10到100倍。
3、選擇虛類而不是介面
4、用靜態方法比虛方法好
如果你不需要訪問一個對象的成員變數,那麼請把方法聲明成static。虛方法執行的更快,因為它可以被直接調用而不需要一個虛函數表。另外你也可以通過聲明體現出這個函數的調用不會改變對象的狀態。
5、不用getter和setter
在很多本地語言如C++中,都會使用getter(比如:i = getCount())來避免直接訪問成員變數(i = mCount)。
6、將成員變數緩存到本地
7、使用常量
8、謹慎使用foreach
9、避免使用枚舉