您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 手机开发培训 04_Android的底层库和程序
Android的底层库和程序Android的底层库和程序第一部分底层库和程序的结构第二部分标准C/C++库bionic第三部分C语言底层库libcutils第四部分Init进程第五部分Shell工具第六部分C++工具库libutils第七部分Android的系统进程第一部分软件的结构1.1本地实现底层的结构1.2增加本地程序和库的方法1.1本地实现底层的结构Android的本地实现层次具有基本的库和程序。这些库和程序是Android基本系统运行的基础。主要包含了以下的内容:C语言底层库libcutilsInit进程Shell工具C++工具库libutils1.2增加本地程序和库的方法Android中增加本地的程序或者库,这些程序和库与它们所在的路径没有关系,只和它们的Android.mk文件有关系。Android.mk具有统一的写法,主要包含了一些系统公共的宏。选项参考以下文件:build/core/config.mk默认的值在以下文件中定义:build/core/base_rules.mk在一个Android.mk中也可以生成多个可执行程序、动态库或者静态库。1.2增加本地程序和库的方法可执行程序的Android.mk:#TestExeLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=\main.cLOCAL_MODULE:=test_exe#LOCAL_C_INCLUDES:=#LOCAL_STATIC_LIBRARIES:=#LOCAL_SHARED_LIBRARIES:=include$(BUILD_EXECUTABLE)1.2增加本地程序和库的方法#TestStaticlibLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=\helloworld.cLOCAL_MODULE:=libtest_static#LOCAL_C_INCLUDES:=#LOCAL_STATIC_LIBRARIES:=#LOCAL_SHARED_LIBRARIES:=include$(BUILD_STATIC_LIBRARY)静态库(归档文件)的Android.mk:1.2增加本地程序和库的方法#TestsharedlibLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=\helloworld.cLOCAL_MODULE:=libtest_sharedTARGET_PRELINK_MODULE:=false#LOCAL_C_INCLUDES:=#LOCAL_STATIC_LIBRARIES:=#LOCAL_SHARED_LIBRARIES:=include$(BUILD_SHARED_LIBRARY)动态库(共享库)的Android.mk:1.2增加本地程序和库的方法可执行程序、动态库和静态库生成的女表分别在以下的文件夹中:out/target/product/generic/obj/EXECUTABLEout/target/product/generic/obj/STATIC_LIBRARYout/target/product/generic/obj/SHARED_LIBRARY其目标的文件夹分别为:XXX_intermediatesXXX_shared_intermediatesXXX_static_intermediates对于可执行程序和动态库,生成的LINK子目录中的包含带有符号的库(没有经过strip)。1.2增加本地程序和库的方法编译模板的区别如下所示:目标的模板:可执行程序,动态库,静态库include$(BUILD_EXECUTABLE)include$(BUILD_SHARED_LIBRARY)include$(BUILD_STATIC_LIBRARY)如果编译主机的:可执行程序,动态库,静态库include$(BUILD_HOST_EXECUTABLE)include$(BUILD_HOST_SHARED_LIBRARY)include$(BUILD_HOST_STATIC_LIBRARY)1.2增加本地程序和库的方法安装路径的问题LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH增加以下可以安装到不同的文件系统:LOCAL_MODULE_PATH:=$(TARGET_ROOT_OUT)LOCAL_UNSTRIPPED_PATH:=$(TARGET_ROOT_OUT_UNSTRIPPED)文件系统的选择:TARGET_ROOT_OUT:表示根文件系统out/target/product/generic/rootTARGET_OUT:表示system文件系统out/target/product/generic/systemTARGET_OUT_DATA:表示data文件系统out/target/product/generic/data1.2增加本地程序和库的方法进行安装工作的Android.mk:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)copy_from:=\A.txt\B.txtcopy_to:=$(addprefix$(TARGET_OUT)/txt/,$(copy_from))$(copy_to):PRIVATE_MODULE:=txt$(copy_to):$(TARGET_OUT)/txt/%:$(LOCAL_PATH)/%|$(ACP)$(transform-prebuilt-to-target)ALL_PREBUILT=$(copy_to)#createsomedirectoriesDIRS:=$(addprefix$(TARGET_OUT)/,\txt\$(DIRS):@echoDirectory:$@@mkdir-p$@1.创建路径:system/txt2.在其中安装:A.txt和B.txt第二部分标准C/C++库bionicbionic提供C/C++标准库的功能,它是一个专为嵌入式系统设计的轻量级标准库实现。bionic的源码和头文件在以下的目录中:bionic/相对传统的标准库实现,如glibc,bionic的体积和内存占用更小。bionic支持标准C/C++库的绝大部分功能,支持数学库,以及NPTL线程库。它还实现了自己的Linker以及Loader,用于动态库的创建和加载。bionic加入了一些Android独有的功能,比如log的底层支持。另外它还实现了一套property系统,这是整个Android的全局变量的存储区域,bionic使用共享内存的方式来实现维护property系统。第三部分C语言底层库libcutilsC语言底层库提供了C语言中最基本的工具功能。这是Android本地中最为基础的库,基本上Android中所有的本地的库和程序都连接了这个库。头文件的路径:system/core/include/cutils库的路径system/core/libcutils编译的结果是:libcutils.so第三部分C语言底层库libcutilslibcutil中主要的头文件:threads.h:线程sockets.h:Android的套接字properties.h:Android的属性log.h:log信息array.h:数组ashmem.h:匿名共享内存atomic.h:原子操作mq.h:消息队列第四部分Init进程Android启动后,系统执行的第一个进程是一个名称为init的可执行程序。提供了以下的功能:设备管理解析启动脚本执行基本的功能启动各种服务代码的路径:system/core/init编译的结果是一个可执行文件:init启动脚本的路径:system/core/rootdir/init.rc第四部分Init进程init的可执行文件是系统运行的第一个用户空间的程序,它以守护进程的方式运行。intmain(intargc,char**argv){/*......*/umask(0);/*创建文件系统的基本目录*/open_devnull_stdio();/*打开3个文件*/log_init();/*初始化log*/parse_config_file(/init.rc);/*处理初始化脚本*//*获取比内核命令行参数*/qemu_init();import_kernel_cmdline(0);/*初始化驱动设备,创建文件系统节点*/device_fd=device_init();/*属性相关处理和启动logo*//*初始化structpollfdufds[4];*/for(;;){/*进入循环,处理ufds[4]的事件*/nr=poll(ufds,fd_count,timeout);if(nr=0)continue;/*......*/}return0;}第四部分Init进程init.rc是在init启动后被执行的启动脚本,其语法包含了Actions,Triggers,Services,Options,Commands,Properties等。oninitexportPATH/sbin:/system/sbin:/system/bin:/system/xbinmkdir/systemonproperty:ro.kernel.qemu=1startadbdservicevold/system/bin/voldsocketvoldstream0660rootmount使用方法参考system/core/init/readme.txt,关键字参考system/core/init/keyword.h。第五部分Shell工具Android系统的启动后,提供了基本shell界面供开发调试使用。需要启动了一个名称为console的服务,实际上执行的程序:/system/bin/shsh代码的路径:system/core/shtoolbox代码的路径:system/core/toolbox生成的文件/system/bin/toolbox,目标文件系统/system/bin/中的具有一些符号将连接到toolbox上。第六部分C++工具库libutilslibutils是Android的底层库,这个库以C++实现,它提供的API也是C++的。Android的层次的C语言程序和库,大都基于libutils开发。头文件的路径:frameworks/base/include/utils库的路径frameworks/base/libs/utils编译的结果是:libutils.soRefBase-m_ptrtypesp+m_ptr()+m_refs()typewpParcelIBinder+onTransact()+transact()BBinderBpRefBase+asBinder()+onAsBinder()IInterface+queryLocalInterface()+getInterfaceDescriptor()#onAsBinder()typeBnInterface+BpInterface()#onAsBinder()typeBpInterfaceBpBinderProcessStateIPCThreadState+checkPermission()IPermissionController+onTransact()BnPermissionController+getHeapID()+getBase()+getSize()+getFlags()IMemoryHeap+onTransact()BnMemoryHeap+getMemory()+fastPointer()+fastPointer()+size()+offset()IM
本文标题:手机开发培训 04_Android的底层库和程序
链接地址:https://www.777doc.com/doc-7211252 .html