zoukankan      html  css  js  c++  java
  • 【转】Android底层库和程序

    原文网址:http://blog.csdn.net/louiswangbing/article/details/6616202

    Android底层库和程序

    1、     本地实现的基本结构

    Android的本地实现层次具有基本的库和程序,这些库和程序是Android基本系统运行的基础,主要包含以下内容:

    l  标准C/C++库Bionic;

    l  C语言工具库libcutils;

    l  init进程;

    l  shell工具;

    l  C++工具库libutils。

    2、     增加本地库的方法

    Android中增加本地库或者程序,与其代码路径无关,只和他们的Android.mk文件有关系。

    Android.mk和普通的makefile略有不同,具有统一的写法,主要包括一些系统公共的宏定义。

    Android.mk中选项参考以下文件路径:

    build/core/config.mk

    各个选项的默认值在以下文件中定义:

    build/core/base_rules.mk

    在一个Android.mk中也可以生成多个可执行程序、动态库或者静态库。

    在Android中编译一个可执行程序的模板如下所示:

    # test exe

    LOCAL_PATH :=$(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_SRC_FILES:=

                   main.c

    LOCAL_MODULE :=test_exe

    #LOCAL_C_INCLUDES:=

    #LOCAL_STATIC_LIBRARIES:=

    # LOCAL_SHARED_LIBRARIES:=

    include $(BUILD_EXECUTABLE)

    编译一个可执行程序,需要在LOCAL_SRC_FILES中啊计入源文件路径(相当与当前的目录),在LOCAL_C_INCLUDES加入所需要包含的头文件路径,在LOCAL_STATIC_LIBRARIES中加入所需要连接的静态库(.a)的名称,在LOCAL_SHARED_LIBRARIES中加入所需要连接的动态库(.so)的名称。LOCAL_MODULE表示模块最终的名称。最后,使用include $(BUILD_EXECUTABLE)表示以一个可执行程序的方式进行编译。在本例中LOCAL_MODULE被定义为test_exe,因此最终生成的可执行程序的名称是test_exe。

    在Android.mk中编译一个静态库的模板如下所示:

    # test staticlib

    LOCAL_PATH :=$(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_SRC_FILES:=

                   main.c

    LOCAL_MODULE :=libtest_static

          

    #LOCAL_C_INCLUDES:=

    #LOCAL_STATIC_LIBRARIES:=

    # LOCAL_SHARED_LIBRARIES:=

    include $(BUILD_STATIC_LIBRARY)

    编译一个静态库,基本的内容和编译可执行程序相似,区别在于使用include $(BUILD_STATIC_LIBRARY)表示编译静态库,本例中LOCAL_MODULE被定义为libtest_static,所以最终生成的静态库的名称是libtest_static.a。

    在Android.mk中编译一个动态库的模板如下所示:

    # test sharedlib

    LOCAL_PATH :=$(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_SRC_FILES:=

                   main.c

    LOCAL_MODULE :=libtest_shared

          

           TARGET_PRELINK_MODULE:= false

          

    #LOCAL_C_INCLUDES:=

    #LOCAL_STATIC_LIBRARIES:=

    # LOCAL_SHARED_LIBRARIES:=

    include $(BUILD_SHARED_LIBRARY)

    编译一个动态库,基本的内容和编译可执行程序、静态库相似,区别在于使用include $(BUILD_ SHARED _LIBRARY)表示编译静态库,本例中LOCAL_MODULE被定义为libtest_ shared,所以最终生成的静态库的名称是libtest_shared.so。

    在Android中不需要对C源文件和C++源文件进行区分,统一加入LOCAL_SRC_FILES中即可。

    可执行程序、静态库和动态库生成的编译结果分别在一下的目录中:

    out/target/product/generic/obj/EXECUTABLE

    out/target/product/generic/obj/STATIC_LIBRARY

    out/target/product/generic/obj/SHARED_LIBRARY

    每个模块的魔表文件夹分别为:

    l  可执行程序:{XXX}_intermediates

    l  静态库:{XXX}_static_intermediates

    l  动态库:{XXX}_shared_intermediates

    其中{XXX}为每个模块中LOCAL_MODULE所定义的名称。

    在编译过程中,可以编译目标及的内容,也可以编译主机的内容。以上的例子是编译目标及的内容,可执行程序、动态库、静态库使用宏分别为:

    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)

  • 相关阅读:
    WM有约(二):配置信息
    ASP+Wrod、excel打印程序示例
    用stream直接下载文件
    ASP判断gif图像尺寸的方法
    白菜世纪RSS无刷新聚合器(1221修正)
    ASP.NET常用代码
    图片超过规定的大小就按原图片大小缩小
    javascript弹出窗口总结
    asp excel sql 关系大总结
    打开窗口
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4308444.html
Copyright © 2011-2022 走看看