早上看了篇文章《你没穷过你不懂》我觉得从社会层面来看说的有一些道理,但是从个人来说,我觉得人的一生钱虽然很重要,但是追求人生的意义更重要,不然我们比动物也强不到哪去。
主要涉及内容
- android 源代码的下载以及编译
- android源代码的目录结构
android 源代码的下载以及编译
下载代码比较简单,相信使用过Ubuntu的程序员,下载代码更是小菜一碟。(以下都是在Ubuntu上进行操作)
- 下载并安装repo,repo是对git的封装和增强,主要用来管理android的源代码
mkdir ~/bin 创建bin目录
PATH=~/bin:$PATH 将bin目录放到环境变量PATH中
下载repo并且让它可执行
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
- 下载源代码
创建存放源码的目录
mkdir ~/androidsource
cd androidsource
与android源码库进行关联
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r17
进行同步
repo sync -c -j4 --no-tags
这个网址可以查看对应版本的分支名 https://source.android.com/source/build-numbers#source-code-tags-and-builds
由于代码较多,下载时间可能会长。另外因为国内无法访问google需要翻墙才行
- 编译源代码
3.1 配置环境主要就是openjdk1.8其他的缺什么到时候就下载什么就好了
3.2 进行编译
进入android源码根目录
source build/envsetup.sh
lunch
make -j4
在执行了lunch后会提示选择对应的产品(在后面会讲)如果仅仅是为了看源码,执行编译随便选就可以,或者不执行lunch 而直接make。
这个过程同样需要花费很多的时间
3.3 进入out/target目录,里面存放的就是你编译的结果
android源代码的目录结构
目录 | 作用 |
---|---|
abi | 不详(没有用过) |
art | 不详(没有用过) |
bionic | 标准的C库源文件,在编译的时候会使用 |
bootable | 引导程序的源码,主要是recovery的代码 |
build | 编译的核心位置,里面存放着大量的编译脚步.mk文件 |
cts | 兼容性测试代码,如果想要通过google的认证,必须要通过兼容性测试 |
dalvik | 和dalvik相关的代码 |
developers | 包含了gradle以及一些sdk的例子,如Camera2 API的使用demo |
development | 开发android工程所涉及到的一些配置文件等 |
device | 包含了不同产品的相关编译脚本 |
docs | 和android源码相关的文档,其实就是source.android.com |
external | 系统所涉及的外部库,例如sqlite等 c/c++的代码比较多 |
frameworks | android framework的核心 |
hardware | 硬件抽象层HAL定义的头文件 |
libcore | dalvik 所涉及到的java库 |
ndk | 编译ndk 所需要的相关文件 |
packages | android系统自带的一些应用如Setting |
pdk | 是在新的android版本发布之前,提供给芯片厂商和OEMS的简化版android新系统,为了更好的完成迁移工作 |
prebuiltes | 包含了不同平台的ARM编译器 |
sdk | 编译sdk所需要的相关文件 |
system | 包含了android所需要的一些工具如adb等 |
tools | 一些辅助性工具 |
vendor | 和产品相关的私有文件,一般来说是目标文件,也就是说vendor下的内容并不是开源的,是各个厂商自己的东西 |