AOSP 源码环境搭建「终于解决」

AOSP 源码环境搭建「终于解决」准备工作 配置Android Studio **调整内存大小: ** Android Studio需要大量的内存来加载Android源码,所以经常

这是我参与更文挑战的第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/setup

source.android.com/source/buil…

blog.csdn.net/dd864140130…

Android 架构简介

总体架构

Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。

image.png

image.png

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

Linux 平台下阅读源码的工具

Source Insight/Understand

【工利其器】工具使用之(一)Source Insight篇

如何阅读Android源码

OpenGrok

搭建大型源码阅读环境——使用 OpenGrok

工具使用-Mac上搭建OpenGrok查看Android源码

androidxref

Android Code Search

在线看的话,openGrok已经不推荐了,目前官方已经有了在线版,挺好用。

Android Code Search

Android Studio

AOSP 源码导入 Android Studio

参考

获取Android源码,初识源码模块架构

Github asop mirror

Android系统架构与系统源码目录

下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04

AndroidStudio源码开发环境搭建

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13180.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注