AOSP系列—阅读源码并熟悉AOSP目录结构

今日名言

再如何不可思议的事情,一旦做的次数多了,便会习惯直至麻木甚至开始乐在其中。 --猫腻 《将夜》

Android做的久了,有些东西自然而然就要了解 一些。对于Android系统源码来说,我们可能不需要改动它,但读懂它还是有必要的。

这里先放上几个查看源码的地址

AOSPXRef 这个地址是阿里云的,感觉起来会比较快,而且已经更新到10.0了

AndroidXRef 这个有时比较慢,目前为止只更新到9.0

下面的分析基于系统 Q - 10.0.0_r2

整个目录如下所示:

在这里插入图片描述

  • art:Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性

  • bionic:基础C库源代码,Android改造的C/C++库

  • bootable:Android程序启动导引,适合各种bootloader的通用代码,包括一个recovery目录

  • build:存放系统编译规则及generic等基础开发包配置

  • cts: Android兼容性测试套件标准

  • dalvik:Android Dalvik虚拟机相关内容

  • developers:Android开发者参考文档

  • development: Android应用开发基础设施相关

  • device:Android支持的各种设备及相关配置

  • external:Android中使用的外部开源库

  • frameworks:应用程序框架,Android系统核心部分,由Java和C++编写

  • hardware:硬件适配接口

  • kernel:Linux Kernel,不过Android默认不提供,需要单独下载,只有一个tests目录

  • libcore:Android Java核心类库

  • libnativehelper:Android动态库,实现JNI库的基础

  • packages:应用程序包

  • pdk:Plug Development Kit 的缩写,本地开发套件

  • platform_testing:Android平台测试程序

  • prebuilts:x86和arm架构下预编译的一些资源

  • sdk:Android的Java层sdk

  • system:Android底层文件系统库、应用和组件

  • test:Android Vendor测试框架

  • toolchain:Android工具链文件

  • tools:Android工具文件

目录解析

1. build

存放系统编译规则及generic等基础开发包配置,我们如果需要进行系统开发或者只是想改动系统源码然后编译一下系统,是需要对这块了解的。目录如下:

在这里插入图片描述

简单介绍如下:

目录名介绍
blueprint输入为.bp文件。输出为.ninja文件
core核心的编译规则makefile
katikati is an experimental GNU make clone
make以前的老的make系统
soong新的Build系统
targetAOSP自带的Target(模拟器)的一些makefile
tools编译中使用的shell及python写的工具脚本
build/envsetup.sh编译初始化脚本

Android.bp:Android7.0开始代替Android.mk文件,它是告诉ndk将jni代码编译成动态库的一个脚本
Makefile:全局Makefile文件,用来定义编译规则

2. framework

Android核心应用都在这个framework中,我们经常说的framework层的开发就是基于这块,千万别觉得高大上,其实和我们平时写程序差不多,我们常说的分析系统源码,其实也只是分析到这一层而已。我们先看下这个目录下有啥:

在这里插入图片描述

简单介绍如下

目录名介绍
framework/av/多媒体相关的native层源码目录
framework/base/一些基础库代码,各种解析类、工具类都在这个里面
framework/compile/编译相关的内容
framework/ex/ex文件解析器
framework/minikin/Android原生字体
framework/ml/机器学习
framework/multidex/multi dex Loader
framework/native/power、surface、input、binder等服务的native层实现源码目录
framework/opt/一些基础软件,如:日历、网络、蓝牙
framework/rs/Render Script 可创建3D接口
framework/wilhelm/OpenSL ES/OpenMAX AL的audio

**

  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在 Android AOSP 源码的 device 目录下添加自定义的 framework 模块的步骤如下: 1. 创建新的模块目录: 在 device/{vendor_name}/{device_name}/ 目录下创建一个新的子目录,用于存放自定义的 framework 模块。例如,可以创建一个名为 myframework 的目录: ``` mkdir -p device/{vendor_name}/{device_name}/myframework ``` 2. 添加 Android.mk 文件: 在 myframework 目录下创建一个名为 Android.mk 的文件,用于定义自定义的 framework 模块。例如,可以添加以下代码: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := myframework LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_SRC_FILES := MyFramework.java LOCAL_SDK_VERSION := current LOCAL_JAVA_LIBRARIES := core-libart LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 LOCAL_STATIC_ANDROID_LIBRARIES := libsqlite include $(BUILD_JAVA_LIBRARY) ``` 其中: - LOCAL_MODULE 定义了模块名称; - LOCAL_MODULE_TAGS 定义了模块的标签,optional 表示该模块是可选的; - LOCAL_MODULE_CLASS 定义了模块的类型,JAVA_LIBRARIES 表示该模块是一个 Java 库; - LOCAL_SRC_FILES 定义了该模块中包含的 Java 源代码文件; - LOCAL_JAVA_LIBRARIES 定义了该模块所依赖的 Java 库; - LOCAL_STATIC_JAVA_LIBRARIES 和 LOCAL_STATIC_ANDROID_LIBRARIES 定义了该模块所依赖的静态库和 Android 库。 3. 添加 Android.bp 文件: 在 myframework 目录下创建一个名为 Android.bp 的文件,用于定义自定义的 framework 模块。例如,可以添加以下代码: ``` java_library { name: "myframework", srcs: ["MyFramework.java"], static_libs: [ "core-libart", "android-support-v4", ], shared_libs: [ "libsqlite", ], sdk_version: "current", installable: true, } ``` 其中: - name 定义了模块名称; - srcs 定义了该模块中包含的 Java 源代码文件; - static_libs 定义了该模块所依赖的静态库; - shared_libs 定义了该模块所依赖的共享库; - sdk_version 定义了该模块所需的 Android SDK 版本; - installable 定义了该模块是否可安装。 4. 编译 Android 系统: 在编译 Android 系统之前,需要先执行以下命令: ``` source build/envsetup.sh ``` 然后编译 Android 系统: ``` lunch {device_name}-{build_type} make -j{n} ``` 其中 {device_name} 是设备名称,{build_type} 是编译类型(如 userdebug),{n} 是编译线程数。 编译完成后,就可以在 Android 系统中使用自定义的 framework 模块了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ddssingsong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值