19.Android framework層源碼(筆記)

1、提示:在Android的SDK環(huán)境中開發(fā)Java應用,一般只能調(diào)用框架層API。而在源代碼環(huán)境中開發(fā)Java應用,可以調(diào)用框架層非API部分的其他接口。

2、框架層API的主要來源:
Java核心庫core.jar中對外的部分(主要為java.*,javax.*和org.*的各個包);
Java框架庫framework.jar中對外的部分(主要為android.*的各個包);
資源包framework-res.apk中對外的部分(android.R包),是根據(jù)資源文件自動生成的,并沒有Java源代碼與之對應;
core-unit.jar;

3、在Android全系統(tǒng)編譯的時候,如果源代碼和current.xml(framework/base/api/下)描述的API不一致,編譯過程將報錯,可以使用如下的命令更新current.xml:

$ make update-api

4、在開發(fā)Androi的系統(tǒng)的時候,如果需要更改框架層內(nèi)容增加接口,只要不需要對第三方公開,就可以使用@hide描述將其隱藏,這樣就不需要改動current.xml,但是依然卡伊被自己的源代碼環(huán)境中的應用程序調(diào)用。

5、過時的API

@Deprecated

6、Java框架庫主要分布在framework/base/:

  • core:Android核心報;
  • graphics:圖形處理包;
  • opengl:Android OpenGL 3D實現(xiàn);
  • location:定位相關的內(nèi)容;
  • telephony:電話部分相關內(nèi)容;
  • media:多媒體和音頻相關內(nèi)容;
  • wifi:無限局域網(wǎng)相關內(nèi)容;
    在以上的目錄中都包含了一個Java子目錄,也就是Java框架層的代碼。
    core是主要的目錄,實現(xiàn)了Android系統(tǒng)多定義的大部分Java類,其它的部分通常是和硬件有些關系的,每個部分單獨使用一個目錄。

7、框架中的類分為對外的API和內(nèi)部的類

  • <path>/java/android/:Android.*包中的內(nèi)容,其中包括API;
  • <path>/java/com/:com.*包中的內(nèi)容,其中都是內(nèi)部類。
<pah>表示框架庫的一個模塊,例如core、graphics、media等。也就是說,在每模塊的java路徑中,只有android目錄才有可能提供對外的API,
com目錄當中都是內(nèi)部使用的包。當然,android目錄中的內(nèi)容不都是API,在代碼中使用@hide可以隱藏內(nèi)容。除此之外,還可以隱藏各個目錄中
的package.html。各個目錄中的package.html文件為對這個部分的描述;在這個文件中可以使用標記將整個目錄的內(nèi)容“隱藏”。

8、框架庫的編譯結構
frameworks/base/目錄中的Android.mk文件負責framework.jar包的編譯。里面使用宏FRAMEWORKS_BASE_SUBDIRS所指定的各個Java源代碼的路徑,這個宏有build/core/目錄的pathmap.mk文件定義,如下所示:

FRAMEWORKS_BASE_SUBDIRS := \
                $(addsuffix /java, \
                              core \ 
graphics location media opengl sax \
  telephony wifi vpn keystore voip \
)

定義的宏根據(jù)framework/base中的core、graphics、location等子目錄,找到其中的Java目錄中的內(nèi)容。這里的引用方式有些特殊,編譯framework/base目錄中的內(nèi)容的時候卻使用了一個build目錄中的文件指定編譯內(nèi)容。
隨Android版本發(fā)展,如需增加新的目錄,同樣需要修改pathmap.mk文件,同時目錄的結構要和原有的目錄相同。

在編譯過程中,所有的挨打了文件也需要進行處理;并且關聯(lián)生成out/target/common/obj目錄中的framework.aidl文件。如果需要在框架中增加aidl文件,則需要把aidl文件的路徑增加到編譯宏LOCAL_SRC_FILES當中。
** 提示 **
在Android的開發(fā)過程中,如果框架庫的內(nèi)容發(fā)生了更改,全系統(tǒng)編譯時將把所有應用程序包全部重新生成,好是非常長。為了加快調(diào)試速度,如果的確沒有更改API,可以使用mmm的方式編譯framewo/base目錄,至聲稱framewor.jar包。

9、核心部分(frameworks/base/core)
core部分包含了Android中大部分重要的Java類;位于core/java目錄中。

  • core/java/android:很多類是作為Android框架層標準的API;Android核心包及其子包;
  • core/java/com:則是核心內(nèi)部的內(nèi)部包,com/android/下主要是一個internal子包,com/google/目錄為com.google.*包及其子包;

graphics(2D圖形)、OpenGL、Media(多媒體)、Location(定位)、Telephony(電話)、wifi(無線)等

10、Java服務庫 services.jar

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,008評論 25 709
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,869評論 2 45
  • 讀《精進》 【設計挑戰(zhàn)自己】 遇強則強,遇弱則弱。不能滿足于那些約定俗成的“規(guī)定”動作,而要主動突破。迎接挑戰(zhàn),也...
    jiang丫丫丫頭閱讀 550評論 0 0
  • 來自美國弗羅里達州的橙縣動物服務(OCA)最近開始了一個項目,他們相信一張照片可以改變一個在收容所里的動物的命運,...
    神秘的大熊閱讀 345評論 0 0
  • 讀《唐浩明點評曾國藩日記》 道光二十三年三月十一日 作為京官,平時干的實事比較少,全靠三年一次的大考表現(xiàn)來決定是否...
    讀行人聲閱讀 764評論 0 0

友情鏈接更多精彩內(nèi)容