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)

  • 相关阅读:
    Win8 消费者预览版中文版下载地址 官方原版
    Easyui datagrid加载本地Json数据
    myeclipse 8.510.0 安装 svn 方法
    easyui tree使用方法
    安装Oracle 11g r2先决条件检查失败解决方法
    Win8/Win7或XP 双系统安装图文教程
    Oracle存储过程与函数
    MyEclipse 中 使用 TortoiseSVN(1)
    MyEclipse 中 使用 TortoiseSVN(2)
    easyui使用Ajax提交表单,返回Json数据
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4308444.html
Copyright © 2011-2022 走看看