随着对android源码的学习,在cs.android.com/ 查看源码还是有些捉襟见肘,虽然cs的体验还是不错,但是目前只对main分支的代码symbol有索引跳转,有时候还是有些不方便的,于是决定自行搭建一套可以方便快速查看源码的本地系统。
1. 方案选择
双系统:搭建windows+ubuntu双系统,需要查看的时候,需要从windows切换到linux系统,两个系统互相独立,对于习惯windows工作环境的我来说,在尝试数次之后还是放弃了这个方式(主要是菜)。
WSL:Windows子系统,当初出来的时候,方便启动、windows可以方便直接的访问linux的文件系统的特性是真的很方便,但是在实际的时候过程中出现了几个奇怪的现象:当你下载好源码,信心满满的开始编译的时候,就发现编译总是莫名其妙的停掉了,且没有相应的错误提示,只有编译输出的戛然而止。。。发现,用的WSL2不稳定,换成WSL1,一通折腾还是不行。最后发现,这套方案要支持稳定编译,内存至少得32GB。。。看着我的16GB内存,还是看看虚拟机方案吧。
虚拟机:这套方案的优点是两套系统可以实时互操作,缺点就是得通过各种方式来解决不同文件系统之间互相访问的问题。
2. 虚拟机方案
2.1 搭建虚拟机环境
下载VirtualBox与Ubuntu镜像
- 下载Virtualbox:download.virtualbox.org/virtualbox/...
- 下载ubuntu:releases.ubuntu.com/22.04.3/ubu...
创建虚拟机和配置虚拟机网络
常规操作,这里不再赘述。
windows访问虚拟机文件夹
完成以上步骤后,目前只能在虚拟机中访问,要想在windows上访问内容,还得完成几个步骤:
相比共享文件夹还是选择了Samba服务这种更加自由方便的方式
搭建samba服务
- 下载
arduino
sudo apt-get install samba samba-common
- 创建文件夹并配置权限
bash
mkdir /mnt/data
chmod 777 /mnt/data
- 配置
bash
sudo vi /etc/samba/smb.conf
在文件最后一行添加以下配置:
ini
[share] ##命名随意但不能有空格
comment = Ubuntu_share ##注释名,随意
path = /mnt/data ##要共享的文件夹路径(自定义)
public = yes ##意味着不用账户密码,可随意访问(不需要的删掉即可)
browseable = yes
writeable = yes
read only = no
valid users = username ##设置为ubuntu 账户
create mask = 0777 ##往下都是读写之类的权限
directory mask = 0777
force user = nobody
force group = nogroup
available = yes
- 创建账户密码,需先完成以上配置,账户必须是已存在的linux账户
css
smbpasswd -a username
- 重启服务
bash
/etc/init.d/smbd restart
- 完成以上步骤之后就可以在windows添加: 查看虚拟机ip地址,若显示为10.0.2.15,则需关闭虚拟机,将网络连接方式改为【桥接网卡】
yaml
ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.31.145 netmask 255.255.255.0 broadcast 192.168.31.255
inet6 fe80::2245:3d0b:5b74:8a03 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:cb:66:84 txqueuelen 1000 (Ethernet)
RX packets 20251819 bytes 3267664963 (3.2 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27420703 bytes 31970932094 (31.9 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
添加映射网络驱动器位置 完成后就能找到share共享位置:
2.2 下载AOSP
参考source.android.com/docs/setup/... 和 mirrors.tuna.tsinghua.edu.cn/help/AOSP/
下载依赖
arduino
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
下载repo
shell
sudo apt-get update
sudo apt-get install repo
若不适用或者版本过时可以直接下载:
bash
export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
由于网络问题,会经常下载失败,可以采用清华源下载:
bash
mkdir ~/bin/
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo
源码下载
由于android源码非常庞大,直接下载很容易失败,因此可以参考清华源所提供的方法进行下载:
bash
cd /mnt/data
curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
curl指令 后跟的options中,-C表示会跟在之前的进度继续下载,这样即使下载过程因为网络等原因中断也能继续进行,不需要重新开始。
- 解压
bash
tar xf aosp-latest.tar
cd AOSP
- 这个时候目录中只有一个隐藏目录:.repo,需要进行一次同步:
bash
repo sync
加快速度可以用
bash
repo sync -c -j8
完成后,就能看到完整的aosp源码目录:
2.4 android studio导入源码
在导入前需要完成以下几个步骤
编译生成项目配置文件
bash
source build/ensetup.sh
mmm development/tools/idegen/
sudo development/tools/idegen/idegen.sh
完成编译后会在根目录生成android.ipr 和android.iml两个文件,修改文件权限:
bash
sudo chmod 777 android.ipr
sudo chmod 777 android.iml
配置项目配置文件
由于项目的文件内容非常多,第一次导入会耗费非常多时间,这里建议在导入前,打开android.ipr,加入以下配置:
ini
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/docs"/>
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/BUILD" />
打开AS,通过Open an existing Android Studio project选项选择android.ipr 即可导入源码,根据不同电脑的配置,导入时间有长有短,这里耗费了20分钟左右的时间:
参考链接:
liuwangshu.cn/framework/a... blog.csdn.net/liangtianme... param105.medium.com/aosp-source... blog.csdn.net/qq_43604945...