【转】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)
【转】Android底层库和程序的更多相关文章
- Android的底层库libutils介绍
第一部分 libutils概述 libutils是Android的底层库,这个库以C++实现,它提供的API也是C++的.Android的层次的C语言程序和库,大都基于libutils开发. libu ...
- Android.mk添加本地程序和库的经常使用模版
Android.mk添加本地程序和库的经常使用模版 Android中添加本地程序或者库.这些程序和库与其所在路径没有关系.仅仅与它们的配置文件Android.mk有关.Android.mk文件里可以主 ...
- Parse发布Bolts,一个面向iOS和Android的底层库集合
转载自:http://www.infoq.com/cn/news/2014/02/parse-announces-bolts 数月前,Parse被Facebook收购.最近,它开源了一个面向iOS和A ...
- 100个Github上Android开源库
项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, ...
- GitHub上排名前100的Android开源库介绍(来自github)
本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...
- GitHub Top 100的Android开源库
摘要: 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best M... 本项目主要对目前 GitH ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...
- 《Android底层接口与驱动开发技术详解》digest
第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache A ...
- Base 底层库开源项目总结
在Android开发中,我们经常使用一些开源的项目,一般情况下,这些开源项目都是基于开源的底层库进行的开发,以适配各自的用户场景.下面来列举一下本人收藏或Star的项目: 一.JavaCV 项目地址: ...
随机推荐
- 【转】 GDB 常用调试方法
一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break ...
- oracle中的隐式提交(auto commit)
通常我们执行sql或pl/sql时,需要我们手工提交.这样才能使所做的更改永久保存到数据库. 但有时即使我们没有在sql或pl/sql中发出commit命令,所做的更改也会被提交.这种提交是在某些特定 ...
- Oracle的Export用法
Oracle 的 Export 命令用于导出数据库信息,既可以导出表结构,也可以导出数据,表空间,或者按用户导出等等.按照通常的说法,该命令主要是用于数据库的迁移或者备份的.下面就介绍一下该命令的部分 ...
- 【iOS】init,loadView,viewDidLoad加载关系
一.loadView 永远不要主动调用这个函数.view controller会在view的property被请求并且当前view值为nil时调用这个函数.如果你手动创建view,你应该重载这个函数. ...
- Cocos-x 3.2:从C++过渡到Lua(转载)
原文总结的非常好,都是我们学cocos2d-x以来摸索过的东西,如果早有这篇文章就能少走不少弯路了,特此截屏保存.原文链接:http://shahdza.blog.51cto.com/2410787/ ...
- c#保留小数点后两位
double d = 23423.24234234d; Response.Write(d.ToString("0.00"));
- PAT-乙级-1042. 字符统计(20)
1042. 字符统计(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 请编写程序,找出一段给定文字中出现最 ...
- js的原型链
js中的原型链是一个很重要的概念,理解了原型链,对js程序的开发有很大的好处,废话不说,先上图: javascript是基于原型的语言,所以一个对象可以另一个对象继承.不过javascript实现的时 ...
- spoj 62
看了题解 自己好水 ...... #include <cstdio> #include <cstdlib> struct node { int x,y; }; node ...
- Java 程序检查远程服务器状态
通常我们以命令的方式判断远程服务器是否正常运行有两种方式,ping 或 telnet 一个远程端口.假设我们要检查的远程服务器都是 Linux 系统. 从 JDK 1.5 以后, InetAddres ...