大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说AOSP 源码环境搭建「终于解决」,希望您对编程的造诣更进一步.
这是我参与更文挑战的第2天,活动详情查看: 更文挑战
准备工作
配置Android Studio
**调整内存大小: ** Android Studio需要大量的内存来加载Android源码,所以经常会遇到内存不足的问题, 需要加大内存. 点击Help
-> Edit Custom VM Options
, 比如 “-Xms4096m -Xmx4096m”
更多资料:
配置repo
下载repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
或者使用tuna的git-repo镜像
然后建立一个工作目录(名字任意)
mkdir ~/aosp //创建目录,可自己定义
cd ~/aosp
初始化仓库:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果提示无法连接到 gerrit.googlesource.com,请参照git-repo的帮助页面的更新一节。
如果需要某个特定的 Android 版本(Android 版本列表):
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r1
同步源码树(以后只需执行这条命令来同步):
#同步所有可用的project
repo sync
#只同步当前初始化的分支
repo sync -c -j4
#只同步frameworks/base库
repo sync platform/frameworks/base -c -j4
repo sync 失败
虽然是国内镜像,但同步依然会出错停止,所以我们需要创建一个自动下载脚本,确保出错了之后会自动执行repo sync,在aosp文件夹下创建一个脚本down.sh,(自己在aosp文件夹创建down.sh文件,然后用编辑器打开,copy代码进去保存就行)代码如下,这个-j 8
可以自己改,你的CPU总线程数*2:
#!/bin/bash
repo sync -j 8
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync -j8
done
如果只需要同步部分project
把上面的的两行repo sync -j 8
替换成下面的语句
repo sync platform/development platform/frameworks/base -j8
repo sync
命令后面可以指定要同步的project,上面这行命令就是指定了2个project 打开.repo/manifest.xml
,可以看到project的名字和路径。
然后命令行执行,就开始下载啦。(注意:Terminal要在aosp文件夹下)
chmod a+x down.sh
./down.sh
替换已有的 AOSP 源代码的 remote
如果你之前已经通过某种途径获得了 AOSP 的源码(或者你只是 init 这一步完成后), 你希望以后通过 TUNA 同步 AOSP 部分的代码,只需要将.repo/manifest.xml
把其中的 aosp 这个 remote 的 fetch 从 https://android.googlesource.com
改为 https://aosp.tuna.tsinghua.edu.cn/
。
<manifest>
<remote name="aosp" - fetch="https://android.googlesource.com" + fetch="https://aosp.tuna.tsinghua.edu.cn" review="android-review.googlesource.com" />
<remote name="github"
同时,修改 .repo/manifests.git/config
,将
url = https://android.googlesource.com/platform/manifest
更改为
url = https://aosp.tuna.tsinghua.edu.cn/platform/manifest
总结
我们分析源码其实是不需要全部代码的,因为AOSP不仅包括系统源码,还有些工具代码,如aapt,adb等,这些我们根本不需要,而且即便是系统源码,也不是所有我们都需要看,如果真的全部看,你这辈子都看不完.
如果只想下载单个目录,比如我们要下载platform/frameworks/base/目录下的代码,我们可以git clone android.googlesource.com/platform/fr… ,不过这个还是会遇到翻墙的问题,当然我们也可以用镜像。
镜像地址 aosp.tuna.tsinghua.edu.cn/ ,比如我们要下载platform/frameworks/base/目录,就用git clone aosp.tuna.tsinghua.edu.cn/platform/fr… ,如果你带宽够的话,一般几分钟就可以下载好你想要的单个源码了。
如果你想下载单个文件,或者搜索文件名及代码,可以访问 androidxref.com/ ,这里有部分Android的源码
具体可以参考how to read android framework source code in android studio
todo www.jianshu.com/p/367f0886e… 编译源码
wiki.archlinux.org/index.php/A…
还有arch系统 安装aosputil 外接硬盘要ext4格式的
python2环境切换
source.android.com/source/buil…
Android 架构简介
总体架构
Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。
Android源码根目录 | 描述 |
---|---|
abi | abi相关代码,abi:application binary interface,应用程序二进制接口 |
art | 全新的运行环境,需要和Dalvik VM区分开来 |
bionic | 系统C库 |
bootable | 启动引导相关代码 |
build | 存放系统编译规则及generic等基础开发配置包 |
cts | Android兼容性测试套件标准 |
dalvik | dalvik虚拟机 |
developers | 开发者目录 |
development | 应用程序开发相关 |
device | 设备相关配置 |
docs | 参考文档目录 |
external | Android使用的一些开源的模组 |
frameworks | 应用程序框架,Android系统核心部分,由Java和C++编写 |
hardware | 主要是硬件适配层HAL代码 |
libcore | 核心库相关文件 |
libnativehelper | 是Support functions for Android’s class libraries的缩写,表示动态库,是实现的JNI库的基础 |
ndk | Android NDK ( Android Native Development Kit )是一系列的开发工具,允许程序开发人员在Android应用程序中嵌入C/C++语言编写的非托管代码 |
out | 编译完成后代码输出在此目录 |
packages | 应用程序包 |
pdk | Plug Development Kit 的缩写,本地开发套件 |
platform_testing | 平台测试 |
prebuilts | x86和arm架构下预编译的一些资源 |
sdk | sdk和模拟器 |
system | 文件系统和应用及组件,是用C语言实现的 |
toolchain | 工具链文件 |
tools | 工具文件 |
Makefile | 全局Makefile文件,用来定义编译规则 ( 通常文件后缀为.mk ) |
应用层部分
应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。源码根目录中的packages目录对应着系统应用层。
packages目录 | 描述 |
---|---|
apps | 核心应用程序 |
experimental | 第三方应用程序 |
inputmethods | 输入法目录 |
providers | 内容提供者目录 |
screensavers | 屏幕保护 |
services | 通信服务 |
wallpapers | 墙纸 |
应用框架层部分
应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。 应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下
其中系统服务部分在frameworks/base/services中,在frameworks/av/services里存放着音频和照相机的服务。
/frameworks/base目录结构如下
/frameworks/base目录 | 描述 | /frameworks/base目录 | 描述 |
---|---|---|---|
api | 定义API | cmds | 重要命令:am、app_proce等 |
core | 核心库 | data | 字体和声音等数据文件 |
docs | 文档 | graphics | 图形图像相关 |
include | 头文件 | keystore | 和数据签名证书相关 |
libs | 库 | location | 地理位置相关库 |
media | 多媒体相关库 | native | 本地库 |
nfc-extras | NFC相关 | obex | 蓝牙传输 |
opengl | 2D/3D 图形API | packages | 设置、TTS、VPN程序 |
sax | XML解析器 | services | 系统服务 |
telephony | 电话通讯管理 | test-runner | 测试工具相关 |
tests | 测试相关 | tools | 工具 |
wifi | wifi无线网络 |
C/C++程序库部分
系统运行库层(Native)中的 C/C++程序库的类型繁多,功能强大,C/C++程序库并不完全在一个目录中,这里给出几个常用且比较重要的C/C++程序库所在的目录位置。
目录位置 | 描述 |
---|---|
bionic/ | Google开发的系统C库,以BSD许可形式开源。 |
/frameworks/av/media | 系统媒体库 |
/frameworks/native/opengl | 3D图形库/第三方图形渲染库 |
/frameworks/native/services/surfaceflinger | 图形显示库,主要负责图形的渲染、叠加和绘制等功能 |
external/sqlite | 轻量型关系数据库SQLite的C++实现 |
external/webp,external/webrtc | 网络引擎库 |
系统运行库部分
Dalvik虚拟机的实现: /dalvik,从Android 5.0开始,Android应用程序的默认运行环境为ART ( Android Runtime ),ART模式拥有更快更高的运行效率。ART: /art
硬件抽象层部分
hardware/ libhardware: audio、nfc、power实现 ril: 无线硬件设备与电话的实现
阅读工具
vim+ctags+cscope
Source Insight/Understand
OpenGrok
工具使用-Mac上搭建OpenGrok查看Android源码
Android Code Search
在线看的话,openGrok已经不推荐了,目前官方已经有了在线版,挺好用。
Android Studio
参考
下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13180.html