环境:

ArchLinux: 6.2.13-arch1-1 (64-bit)
JAVA:openjdk version "9"
PYTHON: Python 2.7.18
----------
i5双核
16G内存
1T硬盘

android-10.0.0_r47之下载、编译、运行

  1. 下载初始化包,约60G:https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
  2. 解压预下载包,解压出aosp目录,只有隐藏文件夹.repo
cd ~
tar xf aosp-latest.tar
  1. 查看分支,获取同步版本名
cd .repo/manifests 
git branch -a
  1. 在aosp目录选择需要同步的版本
cd ~/aosp
repo init -b android-10.0.0_r47 
repo sync -c # 只同步当前分支,得到完整目录
repo start android-10.0.0_r47_dev --all # 创建分支用于开发
  1. 初始化编译环境

注意 若也是编译android10,为了编译顺利,建议线去看AOSP编译问题,提前做好设置

source build/envsetup.sh
  1. 删除上一次编译的结果,初次编译可以不需要这一步
make clobber
  1. 根据列表,选择与设备对应的编译版本
lunch
  1. 开始编译,编译需要十几个小时
make -j4
  1. 模拟器运行
emulator
  1. 编译SDK
    注意: 每次执行make命令,都会先清空out目录,所以先备份一下之前make处来的out目录下的文件,再make sdk
    直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android。
source build/envsetup.sh
 
lunch sdk-eng
# or
#lunch sdk-userdebug
# or
#lunch sdk-user

make -j4 sdk

下载AOSP源码编译、调试、刷机AOSP 源码整编单编Android源码编译SDK

编译报错

AOSP编译问题

AIDEGen + Android Studio 查看和修改系统源码

去 google 官方下载 Android Studio,并将其放到 /opt 目录下。

接下来,选择我们的目标 Product:

source build/envsetup.sh
lunch aosp_x86_64-eng

做好以上准备工作后,我们就可以打开系统模块了,这里我们以 Settings 为例:
Settings 更换为其他模块名或是模块存在的路径即可打开其他模块

aidegen Settings -i s -s # -i 表示使用ide,s 表示 Android Studio ,-s 表示跳过编译

Android 系统开发工具推荐使用 AIDEGen 将 AOSP 项目导入 Android Studio

切换manifest分支,即android版本分支

当前分支为android-5.1.1_r15,需要切换为android-5.1.1_r26 (仍然使用中科大的镜像源)

cd .repo/manifests 
git branch -a | grep android- | cut -d / -f 3
git branch -a | cut -d / -f 3 # 获取分支名

repo init -b android-5.1.1_r26
repo sync -c

一篇通俗易懂的repo教程repo 操作命令

切换源

修改aosp/.repo/manifests.git/config文件下面位置

[remote "origin"]
        # 清华地址
        #url = http://aosp.tuna.tsinghua.edu.cn/platform/manifest
        # 科大地址
        url = git://mirrors.ustc.edu.cn/aosp/platform/manifest 
        fetch = +refs/heads/*:refs/remotes/origin/*
[manifest]

其他

使用Android Studio导入AOSP源码的奇技淫巧

Android 镜像使用帮助

repo和Git的关系

repo总结

Android init启动流程初识(基于Android10源码分析)

SystemServer启动解析

优化

Android Profiler(一)CPU Profiler

Android Profiler(二)Memory Profiler

Android Profiler之CPU

Shallow Size和Retained Size详解

LeakCanary 与内存泄漏定位