如何在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...

相关推荐
似霰1 小时前
安卓adb shell串口基础指令
android·adb
fatiaozhang95273 小时前
中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
android·adb·电视盒子·魔百盒刷机·魔百盒固件
CYRUS_STUDIO4 小时前
Android APP 热修复原理
android·app·hotfix
鸿蒙布道师4 小时前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师4 小时前
鸿蒙NEXT开发网络相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
大耳猫5 小时前
【解决】Android Gradle Sync 报错 Could not read workspace metadata
android·gradle·android studio
ta叫我小白5 小时前
实现 Android 图片信息获取和 EXIF 坐标解析
android·exif·经纬度
dpxiaolong6 小时前
RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)
android·windows
望获linux7 小时前
实时操作系统在服务型机器人中的关键作用
linux·机器人·操作系统·开源软件·rtos·具身智能
tangweiguo030519877 小时前
Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
android