如何在windows搭建Android系统源码学习环境

随着对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镜像

创建虚拟机和配置虚拟机网络

常规操作,这里不再赘述。

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.iprandroid.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...

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
我爱cope2 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas