Android源代码结构分析
来源:互联网 发布:龙江网络客服中心电话 编辑:程序博客网 时间:2024/05/21 11:39
Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套。
各种应用程序实例
作为基于SDK的开发者一般看的都是packages/apps目录下的程序实例
而packages/providers是内部自带的数据库源程序。
development/是一些开发的例子
第一级别的目录和文件如下所示:
----------------├── Makefile 全局的Makefile├── build 系统编译规则和配置所需要的脚本和工具----------------├── prebuilt各种平台编译工具链├── bionic 基础C库源代码----------------├── frameworks * Android应用程序的核心框架层(java及C++语言)├── system * 底层文件系统/库/应用及组件(C语言)├── dalvik JAVA虚拟机├── external android使用的一些额外开源库├── libcore 与媒体播放框架代码相关----------------├── packages 各种应用程序实例├── development 程序开发所需要的实例/模板/工具----------------├── ndk├── sdk├── cts Android CTS兼容性规范测试用例----------------├── vendor * 厂商定制代码├── device * 厂商定制代码├── hardware * 一些与硬件相关的库,部分厂家开源的硬解适配层HAL代码├── kernel * Linux源代码├── bootable 引导加载器├── recovery 与目标的恢复功能相关----------------
android的移植按如下流程:
(1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来。
(2)正确挂载文件系统,确保内核启动参数和 android 源代码 system/core/rootdir 目录下的 init.rc 中的文件系统挂载正确。
(3)调试控制台,让内核启动参数中的 console 参数以及 android 源代码 system/core/init/init.c 中的console_name 设置和硬件保持一致
(4)打开 android 相关的驱动(logger,binder 等),串口输入 logcat 看 logger 驱动起来,没有的话调试logger 驱动。
解决底层问题方法:解除Android系统的耦合l
1 将Dalvik于bionic以及硬件驱动剥离开
2 修改Dalvik以支持标准glibc和GNU/Linux
3 把Dalvik当作普通应用程序
4 Dalvik可被单独优化和改进
build目录
.|-- envsetup.sh 是一个在使用仿真器运行的时候,用于设置环境的脚本|-- core (核心编译规则,以mk为结尾的文Makefile件,被顶层目录的Makefile引用)|-- history (历史记录)|-- libs | `-- host (主机端库,有android “cp”功能替换)|-- target (目标机编译对象,包含board和product两个目录,为目标所需要文件)| |-- board (开发平台)| | |-- emulator (模拟器)| | |-- generic (通用)| | |-- idea6410 (自己添加的)| | `-- sim (最简单)| `-- product (开发平台对应的编译规则)| `-- security (密钥相关)`-- tools (编译中主机使用的工具及脚本) |-- acp (Android "acp" Command) |-- apicheck (api检查工具) |-- applypatch (补丁工具) |-- apriori (预链接工具) |-- atree (tree工具) |-- bin2asm (bin转换为asm工具) |-- check_prereq (检查编译时间戳工具) |-- dexpreopt (模拟器相关工具,具体功能不明) |-- droiddoc (?作用不明,java语言,网上有人说和JDK5有关) |-- fs_config (This program takes a list of files and directories) |-- fs_get_stats (获取文件系统状态) |-- iself (判断是否ELF格式) |-- isprelinked (判断是否prelinked) |-- kcm (按键相关) |-- lsd (List symbol dependencies) |-- releasetools (生成镜像的工具及脚本) |-- rgb2565 (rgb转换为565) |-- signapk (apk签名工具) |-- soslim (strip工具) `-- zipalign (zip archive alignment tool)
prebuilt 目录
x86和ARM架构下工具链/预编译的一些资源
.|-- android-arm (arm-android相关)| |-- gdbserver (gdb调试器)| `-- kernel (模拟的arm内核)|-- android-x86 (x86-android相关)| `-- kernel (空的)|-- common (通用编译好的代码,应该是java的)|-- darwin-x86 (drawin x86平台)| `-- toolchain (工具链)| |-- arm-eabi-4.2.1| |-- arm-eabi-4.3.1| `-- arm-eabi-4.4.0|-- darwin-x86_64 (drawin x86 64bit平台)|-- linux-x86 (linux x86平台)| `-- toolchain (工具链,我们应该主要用这个)| |-- arm-eabi-4.2.1| |-- arm-eabi-4.3.1| |-- arm-eabi-4.4.0| `-- i686-unknown-linux-gnu-4.2.1 (x86版编译器)|-- linux-x86_64 (linux x86 64bit平台)|-- windows (windows平台)`-- windows-x86_64 (64bit windows平台)
bionic 目录
基础C库源代码
.|-- Android.mk|-- libc (C库)|-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|-- libm (libm数学库的实现)|-- libstdc++ (C++实现库libstdc++)|-- libthread_db (多线程程序的调试器库)`-- linker (动态链接器)
frameworks 目录
核心框架--java及C++语言
system 目录
底层文件系统/库/应用及组件--C语言
dalvik 目录
提供Android JAVA应用程序运行的基础--JAVA虚拟机
external 目录
android使用的一些额外开源库
packages 目录
各种应用程序实例
development 目录
开发者需要的一些例程及工具
vendor 目录
厂家定制内容
hardware 目录
一些与硬件相关的库,部分厂家开源的硬解适配层HAL代码
bootable 目录
引导加载器
out 目录
Android编译完成后,将在根目录中生成一个out文件夹,所有生成的内容均放置在这个文件夹中
SDK和NDK目录没有列出。
作为基于SDK的开发者一般看的都是packages/apps目录下的程序实例
而packages/providers是内部自带的数据库源程序。
development/是一些开发的例子
- android源代码结构分析
- android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- Android源代码结构分析
- Android 源代码目录结构分析
- Android 4.0 源代码结构分析
- Android源代码目录结构分析
- Android源代码 目录结构分析
- Android源代码分析(一) 目录结构分析
- Android源代码分析(一) 目录结构分析
- 百度对作弊行为的惩罚
- C++_函数的重载求两个数或三个数的最值
- CSDN博客文章的备份及导出电子书CHM
- Client Copy 参数详情 - 备忘
- HDU 4433 locker(12年天津,DP)
- Android源代码结构分析
- C++_静态局部变量求阶乘
- Android findbugs
- 用javascritserilization序列化列表或对象后的有时间的列表
- MyEclipse Update Progress Error解决方法
- 编码--大总结,一致性
- 判断二叉树中两个节点的最低共同父节点
- C++_静态局部变量的值在函数结束后不会释放,也不会被外部调用
- 嵌入式系统学习认知