1. 程式人生 > >android framework層是用於開發什麼

android framework層是用於開發什麼

framework的開發比應用層就要煩的多啦。做應用在eclipse中就足夠了,用android系統中的控制元件等工具,或者是自己寫個類來實現特定的功能。而framework層的開發,需要往原始碼中新增程式碼、xml、圖片、id等等資料,這個id可是費了我好大的勁才搞定的。在專案開始的一個半月裡,我探索、嘗試了很多,現在把我的經驗分享出來。網上關於framework層的開發資訊很少,多是靠自己。
  最有效的方式就是分析android的原始碼,看google是怎樣實現一個類的,以及類的層次。我現在看的主要是widget和app中的程式碼,其他的還沒涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的類,也是程式碼量很大的類,我只是大概地過了下,還沒有仔細分析過。

  我花大力氣的地方是資原始檔夾下values中幾個檔案的作用。

  attrs.xml中定義的是類的屬性,屬性是為了能在xml檔案中被引用到,換句話說就是指定類中變數(也就是屬性的實際作用者)的值。這些屬性會在類的建構函式中用到。看過一兩個原始碼就會明白,建構函式中的TypedArray其實就是屬性的陣列,陣列的成員會被賦給類裡的成員,完成從xml的初始化。類的
建構函式
一般有三個,一個是Class(context),這個用於在程式碼中建立一個類,所以只包含一個上下文;Class(context, attrs)和Class(context, attrs, defStyle)用於從xml建立類的情況。

  styles.xml中是各個控制元件的“樣式”,樣式由一個個屬性所組成。我們在編輯xml檔案的時候,不同的類所能設定的屬性有共同的,也有不同的,都是由樣式來控制的。具體可以去看styles.xml這個檔案的內容。

  themes.xml其實也是樣式,只是適用的範圍大一點,這個我是參考網上別人的看法,自己還沒研究過。

  ids.xml是公共的id,也就是對應用層可見的id,id是為了獲得xml中的物件而需要的引數,也就是Object = findViewById(R.id.id_name)中的id_name。這些值可以在程式碼中用android.R.id引用到

  public.xml描述的是為attr、id、drawable所指定的一個32的id值,這個值在current.
xml檔案
中會被用到。

  當我們對public.xml做了改動後,執行make update-api命令,相應的current.xml就會新增這些改動。因為這些值按型別被放在不同的段上,型別相同的必須連續存放,不指定id值的話系統會自動計算出下一個值。

  新增id的方法:1)在ids.xml中新增公共id項,在public.xml中也新增相應的id項。這種辦法沒有相容性,會與後面的版本產生衝突。

  2)在ids.xml中新增公共id項,每一項前面加一行的註釋,這樣就不用在public.xml中新增相應的項了。原始碼中是/** @hide */的形式,這樣current中就不會有相應的段了。

  3)在自己寫的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一樣,搜一下會發現android原始碼中也有這麼用的,這樣ids.xml和public.xml都不用改,相容性我還不確定。