原文网址: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)

【转】Android底层库和程序的更多相关文章

  1. Android的底层库libutils介绍

    第一部分 libutils概述 libutils是Android的底层库,这个库以C++实现,它提供的API也是C++的.Android的层次的C语言程序和库,大都基于libutils开发. libu ...

  2. Android.mk添加本地程序和库的经常使用模版

    Android.mk添加本地程序和库的经常使用模版 Android中添加本地程序或者库.这些程序和库与其所在路径没有关系.仅仅与它们的配置文件Android.mk有关.Android.mk文件里可以主 ...

  3. Parse发布Bolts,一个面向iOS和Android的底层库集合

    转载自:http://www.infoq.com/cn/news/2014/02/parse-announces-bolts 数月前,Parse被Facebook收购.最近,它开源了一个面向iOS和A ...

  4. 100个Github上Android开源库

    项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, ...

  5. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  6. GitHub Top 100的Android开源库

    摘要: 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best M... 本项目主要对目前 GitH ...

  7. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...

  8. 《Android底层接口与驱动开发技术详解》digest

    第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache A ...

  9. Base 底层库开源项目总结

    在Android开发中,我们经常使用一些开源的项目,一般情况下,这些开源项目都是基于开源的底层库进行的开发,以适配各自的用户场景.下面来列举一下本人收藏或Star的项目: 一.JavaCV 项目地址: ...

随机推荐

  1. jQuery 的 json 格式的处理问题

    在实际的使用中时常会发生一些ajax验证的诡异事件,如我在一个文件中使用json传送数据,结果出现了当数据发送到服务器端时(后端主要呈现的是对json数据对象的数据库查询操作),结果显示的是数据已经插 ...

  2. C# list 筛选FindAll

    例如:参数a.list b.ModelId:根据ModelId参数进行筛选 /// <summary> /// 根据ModelId筛选查询出对应的数据 /// </summary&g ...

  3. UIView局部点击(转)

      今天上班遇到一种情况,需要局部响应点击事件,比如在一个UIImageView中设置一个小圆圈图片,要求点击圆圈里面不响应点击,点击小圆圈外面的部分响应点击.可以通过重写hitTest:withEv ...

  4. APP中数据加载的6种方式-b

    我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以 ...

  5. 像Linq一样来使用Graphics

    Linq的链式编程用起来总是那样畅快淋漓,可惜在C#中并不是每时每刻都能有这么畅快的感觉,其中使用Graphics的时候就是,每次用Graphics绘制大量图形时尤其如此.GDI+的API功能很强大, ...

  6. O2O模式

    O2O即Online To Offline(在线离线/线上到线下) 是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台,这个概念最早来源于美国.O2O的概念非常广 泛,既可涉及到线上,又可涉 ...

  7. c++ 字符串工具类

    #include <string> #include "util.h" namespace strtool{ std::string trim(const std::s ...

  8. obj转换成数组

    原则上obj是不能转换成数组的.首先array也是obj.只是一个特殊的object. obj一个很关键的点,是拥有成员和方法,撇开方法不说,obj就是一个key-value结构.也就是哈希数组,而j ...

  9. js中批量处理样式——cssText的使用

    http://www.cnblogs.com/snandy/archive/2011/03/12/1980444.html

  10. PHP 7 值得期待的新特性(上)

    这是我们期待已久的 PHP 7 系列文章的第一篇. 或许你已经知道了,我在 PHP 5.0.0 时间轴 提的 RFC (Request For Comments)通过了, PHP 7 成为 PHP 下 ...