Android framework层源码(笔记)

2017-05-03  本文已影响660人  forty_seven

1、提示:在Android的SDK环境中开发Java应用,一般只能调用框架层API。而在源代码环境中开发Java应用,可以调用框架层非API部分的其他接口。

2、框架层API的主要来源:
Java核心库core.jar中对外的部分(主要为java.*,javax.*和org.*的各个包);
Java框架库framework.jar中对外的部分(主要为android.*的各个包);
资源包framework-res.apk中对外的部分(android.R包),是根据资源文件自动生成的,并没有Java源代码与之对应;
core-unit.jar;

3、在Android全系统编译的时候,如果源代码和current.xml(framework/base/api/下)描述的API不一致,编译过程将报错,可以使用如下的命令更新current.xml:

$ make update-api

4、在开发Androi的系统的时候,如果需要更改框架层内容增加接口,只要不需要对第三方公开,就可以使用@hide描述将其隐藏,这样就不需要改动current.xml,但是依然卡伊被自己的源代码环境中的应用程序调用。

5、过时的API

@Deprecated

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

7、框架中的类分为对外的API和内部的类

<pah>表示框架库的一个模块,例如core、graphics、media等。也就是说,在每模块的java路径中,只有android目录才有可能提供对外的API,
com目录当中都是内部使用的包。当然,android目录中的内容不都是API,在代码中使用@hide可以隐藏内容。除此之外,还可以隐藏各个目录中
的package.html。各个目录中的package.html文件为对这个部分的描述;在这个文件中可以使用标记将整个目录的内容“隐藏”。

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 \
)

定义的宏根据framework/base中的core、graphics、location等子目录,找到其中的Java目录中的内容。这里的引用方式有些特殊,编译framework/base目录中的内容的时候却使用了一个build目录中的文件指定编译内容。
随Android版本发展,如需增加新的目录,同样需要修改pathmap.mk文件,同时目录的结构要和原有的目录相同。

在编译过程中,所有的挨打了文件也需要进行处理;并且关联生成out/target/common/obj目录中的framework.aidl文件。如果需要在框架中增加aidl文件,则需要把aidl文件的路径增加到编译宏LOCAL_SRC_FILES当中。
** 提示 **
在Android的开发过程中,如果框架库的内容发生了更改,全系统编译时将把所有应用程序包全部重新生成,好是非常长。为了加快调试速度,如果的确没有更改API,可以使用mmm的方式编译framewo/base目录,至声称framewor.jar包。

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

graphics(2D图形)、OpenGL、Media(多媒体)、Location(定位)、Telephony(电话)、wifi(无线)等

10、Java服务库 services.jar

上一篇下一篇

猜你喜欢

热点阅读