欢迎光临
我们一直在努力

关于Android源码文件目录分析--学习笔记

了解Android文件目录是开发的基础,也是对后续打下基础。

abi(Application Binary Interface)
应用程序二进制接口,就是abi架构,定义了一套规则,决定了二进制文件如何与系统进行交互。
常见的abi架构有 armeabiv-v7a arm64-v8a armeabi x86 x86_64
不同的cpu支持不同的架构,大部分的cpu都是向前兼容的
在Android手机上安装一个应用时,只有手机CPU架构支持的ABI架构对应的.so文件会被安装。
如果支持多个ABI架构,会按照优先级进行安装。
但是abi目录中掩盖了各种细节·
调用约定控制着函数的参数如何传送以及如何接受返回值;
系统调用的编码和一个应用如何向操作系统进行系统调用;
以及在一个完整的操作系统ABI中,对象文件的二进制格式、程序库等

 ***so so库是Linux系统上使用的共享库 Android中的so文件是动态链接库,是二进制文件,即ELF文件,是ELF格式文件。多用于NDK开发中(ndk:工具开发包) so文件的加载有且仅有两种方式: load(),传参为是一个String类型,不过内容是有要求的,是要so文件的绝对路径,,比如说:/system/lib64/libc++.so 。 loadLibrary() 

art(Android runtime)
ART运行环境,这个是安卓5.0之后的特性 之前使用的是Dalvik
Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,
并且每一个Dalvik 应用作为一个独立的Linux 进程执行。
独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,
这会拖慢应用的运行效率。
而在ART 环境中,应用在第一次安装的时候,
字节码就会预先编译成机器码,使其成为真正的本地应用

bionic
一些基础库 Android的C library 包括:libc, libm, libdl ,libstd++,libthread_db
以及Android特有的链接器linker。
:bionic 就是NDK 的 API
*** Bionic C库不以任何方式与其他标准C库二进制兼容,这意味着基于其他C库生成的二进制文件不应该与Bionic进行动态链接
libc :最基础的库,提供了所有系统的基本功能,进程线程内存管理、时间时区管理、环境变量等
libm :数学函数库,数学函数和浮点运算,速度慢,避免使用。
libdl:动态库的装载,当只是空壳,应用进程使用的dlopen等函数实际上是在linker模块中实现的。
libstdc++ :标准的c++库,,只是new、delete等少数几个操作符的实现
linker:装载动态库以及用于库的重定位

bootable
bootable 下仅包含 recovery 此文件夹,其实就是启动 Android recovery 模式相关的代码
底下有三个文件夹
bootloader/lk //adb命令实现 cpu架构 设备驱动 头文件 主文件 库文件 平台文件 mk文件 文件 脚本文件 目标设备文件
diskinstaller //打包镜像
recovery // 由bootLoader启动,主要用来更新系统 一些压缩工具 资源

build
Android Build 系统,用来定制各种编译规则。存放系统编译规则及generic等基础开发包配置。
主要由 makefile 组成,还有envsetup.sh文件
他的custom_strip文件夹下面还有pl脚本,应该是用来打包img文件的

cts(Compatibility Test Suite)
当用户定制自己特定的系统时,可能会对系统进行不规范的更改,而只有通过cts测试的系统才能颁布许可证,所以一个自动化测试工具 CTS确保 make 出来的系统没问题。
编译cts:
可以单独编译这个cts文件夹 make cts命令来编译CTS
之后会在out/host/linux-x86/cts/下生成android-cts文件夹
eg:下载Android-2.1系统,并编译。
$ . build/envsetup.sh //配置选项,并编译android源码
$ make cts
运行cts:
在android-cts目录下会有3个文件夹,其中一个是tools。
进入tools目录,输入./startcts来启动CTS

dalvik
Android.mk: 是虚拟机编译的makefile文件
vm:此目录包含虚拟机绝大多数代码,包括虚拟机初始化及内存管理的代码
dx:此目录是生成将Java字节码转换为Dalvik机器码的工具
hit:此目录是生成显示堆栈信息/对象信息的工具
libdex: 此目录是生成主机和设备处理dex文件的库
dexopt:此目录是生成dex优化工具
dexdump:此目录是生成dex文件反编译查看工具
dexlist:此目录是生成查看dex文件里所有类的方法的工具
*** mk = makefile 文件–好处:自动化编译
(1)指定文件先后编译的顺序,或者文件是否需要重新编译

developers
主要是一些可运行的 Android 示例项目,可以单独拉出来运行

development
一些工具性的东西和开发者需要的一些例子

device
包含不同品牌手机独有的设备信息

docs
仅包含此文件夹,该文件夹下相关文件就是生成 source.android.com 站点的具体素材及代码

external
开源模块组相关文件:如glide、junit、okhttp、sqlite 等

frameworks
应用程序框架层是系统的核心部分,一方面向上提供接口给应用层调用
另一方面向下与C/C++程序库以及硬件抽象层等进行衔接
包括摄像头服务 电话通讯管理、wifi、电源、gps、背光等

hardware
主要包含了 android HAL(硬件抽象层)相关代码。
硬件抽象层介于 Linux内核驱动程序与 Android 系统之间。
对 Linux 驱动进行了封装,使操作系统级别可以忽略底层实现的细节
其中base文件夹是应用框架层的核心部分

libcore
一些核心库 包括json库 xml解析库

libnativehelper
Android动态库 JNI 相关的一些类
里面include文件夹下面一堆.h文件
与VM无关的本机函数,用于实现系统的方法的类库

ndk(Plug Development Kit )
原生开发工具包
ndk-build : 该shell脚本是Android NDK构建系统的起点
build:包含ndk构建系统的所有模块
ndk-stack:该Shell脚本可以帮助分析Native代码崩溃时的堆栈信息
***ndk:一系列工具合集,ndk提供了一份稳定、功能有限的API头文件声明。

out
编译完后输出的所有相关文件都位于此文件夹下,
包括生成的各种 img 就位于 out/target/product/hammerhead 下
(1)host
主机生成的工具

(2)target 目标机运行的内容 common 通用内容 :resource 资源文件、obj 目标文件 product 针对产品的内容 : data 数据文件系统 

packages
应用程序包,各种内置的 apk、ContentProvider、输入法、壁纸等
文件夹例如有:
apps:应用程序库
wallpaper:壁纸
screensaver:屏幕保护
providers:内容提供者目录 :TvProvider、MediaProvider
services:通信服务

pdk(Platform Development Kit)
平台开发套件,仅包含了一些供硬件抽象层开发使用的必要组件,
供一些 OEM 厂商用来适配及测试最新的Android 系统,加快第三方厂商的更新速度。
加快OEM厂商的update速度

platform_testing
平台相关的一些测试用例

prebuilts
一些预构建成二进制的库 prebuilts
其中关于 build 时 bison 问题的主角就位于 prebuilts/misc/darwin-x86 下的 bison。

sdk
应用程序开发工具箱中工具源代码(sdk和模拟器)
存放Google的api 编译工具 和 临时文件 。
***SDK:很多功能函数的集合体。软件开发工具包,开发某一项功能后封装起来,供其他使用。如:数据分析sdk就是能实现数据分析功能的一个工具包。

system
Android 的部分系统源码及一些工具,主要是在各种 java 启动程序起来前的部分。
工具比如 adb、fastboot、keystore 等,其他如 mkbootimg、init 进程等。
蓝牙 一些核心接口 工具库

tools
Android中的工具文件
例如:gradle工具包

toolchain
Android 工具链

vendor
厂家定制的内容mtk
来存放app源码
还有mtk厂商定制的内容

kernel
安卓内核
***操作系统内核(Kernal)是一组应用软件,这个软件能够控制所有硬件及计算机活动例如:硬盘访问、网卡传输和键盘开始工作。
mediatek
Mtkt提供的各种解决框架方案的代码
包括一些应用程序

zl
不同主板定制的内容
包括内核配置
bootloader程序配置

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《关于Android源码文件目录分析--学习笔记》
文章链接:https://www.456zj.com/20121.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址