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

相关推荐
顾北川_野13 分钟前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
&岁月不待人&24 分钟前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
Winston Wood2 小时前
Android Parcelable和Serializable的区别与联系
android·序列化
清风徐来辽2 小时前
Android 项目模型配置管理
android
帅得不敢出门3 小时前
Gradle命令编译Android Studio工程项目并签名
android·ide·android studio·gradlew
problc3 小时前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter
帅得不敢出门14 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
WZF-Sang15 小时前
Linux—进程学习-01
linux·服务器·数据库·学习·操作系统·vim·进程
我又来搬代码了15 小时前
【Android】使用productFlavors构建多个变体
android
德育处主任17 小时前
Mac和安卓手机互传文件(ADB)
android·macos