19.Android framework层源码(笔记)

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/:

  • core:Android核心报;
  • graphics:图形处理包;
  • opengl:Android OpenGL 3D实现;
  • location:定位相关的内容;
  • telephony:电话部分相关内容;
  • media:多媒体和音频相关内容;
  • wifi:无限局域网相关内容;
    在以上的目录中都包含了一个Java子目录,也就是Java框架层的代码。
    core是主要的目录,实现了Android系统多定义的大部分Java类,其它的部分通常是和硬件有些关系的,每个部分单独使用一个目录。

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

  • /java/android/:Android.*包中的内容,其中包括API;
  • /java/com/:com.*包中的内容,其中都是内部类。
表示框架库的一个模块,例如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目录中。

  • core/java/android:很多类是作为Android框架层标准的API;Android核心包及其子包;
  • core/java/com:则是核心内部的内部包,com/android/下主要是一个internal子包,com/google/目录为com.google.*包及其子包;

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

10、Java服务库 services.jar

你可能感兴趣的:(19.Android framework层源码(笔记))