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