美文网首页
Android framework层源码(笔记)

Android framework层源码(笔记)

作者: forty_seven | 来源:发表于2017-05-03 17:15 被阅读660次

    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和内部的类

    • <path>/java/android/:Android.*包中的内容,其中包括API;
    • <path>/java/com/:com.*包中的内容,其中都是内部类。
    <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目录中。

    • 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

    相关文章

      网友评论

          本文标题:Android framework层源码(笔记)

          本文链接:https://www.haomeiwen.com/subject/vtiktxtx.html