安装依赖libs
sudo apt-get install openjdk-11-jdk;#安装jdk
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache;
sudo apt-get install libssl-dev libncurses5;
下载 repo 工具
sudo apt install curl
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
换源
1.修改还源文件权限
sudo chmod 777 /etc/apt/sources.list
2.备份文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
3.修改
清华源
地址:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
中国科学技术大学源
地址:https://lug.ustc.edu.cn/wiki/mirrors/help/ubuntu/
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
阿里源
地址:https://developer.aliyun.com/mirror/ubuntu
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
4.更新
sudo apt-get update
sudo apt-get upgrade
初始化与同步
操作方法
方法一:
curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码
方法二:
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/mirror/manifest#默认最新
#选择特定版本 版本列表https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r6
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r43
repo sync #同步(全仓下载)
#单仓下载方式
repo sync -c platform/frameworks/base
repo sync -c platform/frameworks/native
repo sync -c system/core
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
查看版本列表,如果网站打不开可以下载附件:android版本列表以及其适用机型
常见报错
-
如果提示无法连接到
gerrit.googlesource.com
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod +x repo export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
-
如果提示身份未知
按照提示设置email和name即可
-
repo脚本问题
在初始化代码操作或者使用repo --version
命令检查repo时,可能会有以下报错:File "/home/xxx/bin/repo", line 51 def print(self, *args, **kwargs): ^ SyntaxError: invalid syntax
改为使用以下引导脚本:curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
编译
全仓编译
. build/envsetup.sh
lunch sdk_phone_x86_64 #must this
make -j16#全仓编译
编译完成后,输入命令emulator
运行模拟器
注:第一次编译一定要全仓编译
模拟器运行
第一次编译之后如果不想再编译直接运行模拟器,可以用以下命令
. build/envsetup.sh
lunch sdk_phone_x86_64 #must this
#以可写的形式打开模拟器,否则模拟器文件是只读状态
emulator -writable-system
如果是在android studio中打开模拟器,则需要一个模拟器名字
在你的SDK目录下找到模拟器目录emulator,运行一下命令
#查看模拟器名字
./emulator -list-avds
#以可写的形式打开模拟器,否则模拟器文件是只读状态
./emulator '@模拟器名字' -writable-system
常见的单模块编译
使用mm
和mmm
命令或者make
命令编译模块代码
-
mm
和mmm
命令编译模块代码
mm(make module)命令用于编译当前目录下的模块。当你使用mm时,它会找到当前目录对应的Android.mk文件,并且只编译这个目录下定义的模块。
例如:进入到frameworks\base\services\
目录,直接运行mm
命令编译模块mmm(make module matches)命令与mm类似,也是用于编译特定的模块,但它允许你指定一个路径。这意味着你可以从任何地方执行mmm命令,并提供要编译模块的路径作为参数。
例如,你可以在源码的根目录下运行mmm frameworks\base\services\
来编译位于frameworks\base\services\
目录下的模块。 -
make
命令编译模块代码
在源码根目录下运行命令模块:
make Launcher3
代码路径: packages/apps/Launcher3
生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/Launcher3
adb install -t -d Launcher3.apk模块:
make Launcher3QuickStep
代码路径: packages/apps/Launcher3/quickstep
生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/Launcher3QuickStep
adb install -t -d Launcher3QuickStep.apk模块:
make SystemUI
代码路径:frameworks\base\packages\SystemUI
生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/SystemUI
adb push SystemUI.apk /system_ext/priv-app/SystemUI
注:有的公司SystemUI在 packages/apps/目录下集成,生成apk的位置也会不同,需要看对应目录下是否有Android.bp或者mk之类的文件。比如原生代码在frameworks\base\packages\SystemUI目录有Android.bp文件,说明SystemUI就是在这个目录下集成。模块:
make services
代码路径:frameworks\base\services
生成包目录:out/target/product/emulator_x86_64/system/framework/services.jar
adb push services.jar /system/framework/模块:
make framework
(android 11之前的代码使用)
模块:make framework-minus-apex
(android 11及其之后的代码使用)
代码路径:frameworks\base\
生成包目录:out/target/product/emulator_x86_64/system/framework/framework.jar
adb push framework.jar /system/framework/模块:
make framework-res
代码路径:frameworks\base\core\res
生成包目录:out/target/product/emulator_x86_64/system/framework/framework-res.apk
adb push framework-res.jar /system/framework/
注:建议先make framework
在编译该模块,因为framework-res依赖framework模块:
make inputflinger
代码路径:frameworks/native/services/inputflinger
生成包目录:
out/target/product/emulator_x86_64/system/lib/libinputflinger.so
out/target/product/emulator_x86_64/system/lib64/libinputflinger.so
adb push libinputflinger.so system/lib
adb push libinputflinger.so system/lib64
注:单仓编译后记得push到对应得文件目录中,重启生效
image镜像文件编译
生成手机镜像
命令格式:make 需要生成的镜像模块image
快速生成手机镜像
命令格式:make 需要生成的镜像模块image-nodeps
生成系统镜像
make systemimage
快速生成系统镜像
make systemimage-nodeps
生成镜像目录:out/target/product/emulator_x86_64
从Makefile中可以看出出了会生成基本system.image镜像文件而且还会生成system-qeme.image镜像文件,system-qeme.image是适用于模拟器的镜像文件
关于其他镜像的的生成Makefile中也有写,文件路径在
AOSP源码根目录/build/core/Makefile
和AOSP源码根目录/build/core/main.mk
注:make systemimage
本质是拷贝已经生成的文件打包成system.img文件。如果代码有修改,则需先编译修改代码的模块,再去生成镜像文件
其他编译命令
init
make init
mmm system/core/init
zygote
make app_process
mmm frameworks/base/cmds/app_process
system_server
make services
mmm frameworks/base/services
java framework
make framework
mmm frameworks/base
framework资源
make framework-res
mmm frameworks/base/core/res
jni framework
make libandroid_runtime
mmm frameworks/base/core/jni
binder
make libbinder
mmm frameworks/native/libs/binder
编译报错
-
提示:
ninja failed with: exit status 137
查看文件
gedit build/soong/java/config/config.go
javacheap的值太小会被系统直接killed掉
export MAVEN_OPTS="-Xms8192m -Xmx8192m"
一般配置自身电脑内存值的一半修改后,记得清空out目录再编译,且是必须清空 :
rm -rf out
编译后要查看配置是否有生效,可以查看此文件:
out/soong/build.ninja
,在此文件内搜索JavacHeapSize,看此值是否为你设置的值 -
提示:
ninja: no work to do.
当编译结束后,却提示ninja: no work to do. ,且编译out目录没有编译产物,则可以执行make clean后再重新编译 -
编译时,命令提示框突然闪退
可能是由于电脑内存不足导致,可以尝试清理系统内存的缓存在编译试试sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
-
模拟器运行报错
ERROR | Running multiple emulators with the same AVD ERROR | is an experimental feature. ERROR | Please use -read-only flag to enable this feature
在源码目录下android-13.0.0_r43/out/target/product/emulator_x86_64找到cache.img和cache.img.qcow2,删除即可。
或者直接杀死对应进程
-
直接make全仓编译报错
Out of space? Out of inodes? The tree size of out/target/product/emulator_x86_64/data is 1145001984 bytes (1091 M B), with reserved space of 0 bytes (0 MB). The max image size for filesystem files is 576716800 bytes (550 MB), out of a total partition size
我们需要在boardconfig.mk修改这个BOARD_SYSTEMIMAGE_PARTITION_SIZE参数的数值。
因此在 项目根目录中的device
目录下运行命令find . -iname "boardconfig.mk"
这里有很多我们要找到我们需要修改的那个文件
运行 你的编译初始化命令,例如:. build/envsetup.sh lunch sdk_phone_x86_64
发现device/generic/goldfish
目录对应的就是上面我们查找的boardconfig.mk中所存放的目录,由于我们编译的是使用模拟器且为x86_64,因此选择generic/goldfish/emulator64_x86_64/BoardConfig.mk
在文件中把数值调整为较大的值即可
如果没有BOARD_SYSTEMIMAGE_PARTITION_SIZE参数,则需要添加一句BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648
,之后重新编译。
如果还有报错,可以先make clean
之后再编译。
导入源码至android studio
可以不看1-5步,直接解压文件【idegen生成的工程文件
】,放至源码根目录下使用
-
进入源码根目录,初始化系统环境
source build/envsetup.sh
-
源码根目录执行如下命令 ,生成idegen.jar
mmm development/tools/idegen/
-
源码根目录下执行
sudo development/tools/idegen/idegen.sh
-
修改权限
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
-
过滤模块
使用文本编辑器打开android.iml文件,搜索关键字"excludeFolder ",把不需要加载的模块添加到此处
我这里保留了fraweworks、vender、packages、system、sdk模块,其他过滤掉,参考如下:<excludeFolder url="file://$MODULE_DIR$/./external/emma"/> <excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/> <excludeFolder url="file://$MODULE_DIR$/out/eclipse"/> <excludeFolder url="file://$MODULE_DIR$/.repo"/> <excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/> <excludeFolder url="file://$MODULE_DIR$/external/chromium"/> <excludeFolder url="file://$MODULE_DIR$/external/icu4c"/> <excludeFolder url="file://$MODULE_DIR$/external/webkit"/> <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/> <excludeFolder url="file://$MODULE_DIR$/out/host"/> <excludeFolder url="file://$MODULE_DIR$/out/target/common/docs"/> <excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/> <excludeFolder url="file://$MODULE_DIR$/out/target/product"/> <excludeFolder url="file://$MODULE_DIR$/prebuilt"/> <excludeFolder url="file://$MODULE_DIR$/art" /> <excludeFolder url="file://$MODULE_DIR$/bionic" /> <excludeFolder url="file://$MODULE_DIR$/bootable" /> <excludeFolder url="file://$MODULE_DIR$/build" /> <excludeFolder url="file://$MODULE_DIR$/compatibility" /> <excludeFolder url="file://$MODULE_DIR$/dalvik" /> <excludeFolder url="file://$MODULE_DIR$/cts" /> <excludeFolder url="file://$MODULE_DIR$/developers" /> <excludeFolder url="file://$MODULE_DIR$/developers/samples" /> <excludeFolder url="file://$MODULE_DIR$/development" /> <excludeFolder url="file://$MODULE_DIR$/device" /> <excludeFolder url="file://$MODULE_DIR$/devices" /> <excludeFolder url="file://$MODULE_DIR$/docs" /> <excludeFolder url="file://$MODULE_DIR$/external" /> <excludeFolder url="file://$MODULE_DIR$/flashing-files" /> <excludeFolder url="file://$MODULE_DIR$/hardware" /> <excludeFolder url="file://$MODULE_DIR$/kernel" /> <excludeFolder url="file://$MODULE_DIR$/libcore" /> <excludeFolder url="file://$MODULE_DIR$/libnativehelper" /> <excludeFolder url="file://$MODULE_DIR$/out" /> <excludeFolder url="file://$MODULE_DIR$/pdk" /> <excludeFolder url="file://$MODULE_DIR$/platform_testing" /> <excludeFolder url="file://$MODULE_DIR$/prebuilt" /> <excludeFolder url="file://$MODULE_DIR$/prebuilts" /> <excludeFolder url="file://$MODULE_DIR$/shortcut-fe" /> <excludeFolder url="file://$MODULE_DIR$/test" /> <excludeFolder url="file://$MODULE_DIR$/toolchain" /> <excludeFolder url="file://$MODULE_DIR$/tools" />
-
导入源码
Android Studio 打开工程源码下的 android.ipr 文件,此时就开始加载代码
如果导入有异常,需要删除根目录下的缓存文件android.iws,直接重新加载android.ipr 文件,或者按上面的步骤重新生成android.ipr 文件加载即可。 -
调整Modules
打开源码跳转时可能会出现加载异常的情况
我们打开File->Project Structure
选中Module source,按住Alt+↑,使其到最顶部
repo 切换分支
-
查看可切换的分支
例如查看android14相关分支cd .repo/manifests git branch -a |cut -d / -f 3 | grep android14
效果如图
-
选择切换的版本
例如选择android-14.0.0_r7#切换版本 repo init -b android-14.0.0_r7 # 本地是最新代码可以不用同步repo sync repo start android-14.0.0_r7 --all # 如果上面命令有报错就直接repo sync repo sync # 查看当前的分支 repo branches
交换空间swap配置(可选)
编译过程中可能会有FAILED: out/soong/build.ninja这类报错,可以配置swap之后编译
1.创建要作为swap分区的文件:增加count大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
dd if=/dev/zero of=/var/swapfile bs=1024 count=16777216
这里count的值一般和自身电脑内存一致,我这里是1024 x 1024 x 16 = 16G
2.格式化为交换分区文件:
mkswap /var/swapfile
建立swap的文件系统
3.修改权限
chmod -R 0600 /var/swapfile
4.启用交换分区文件:
swapon /var/swapfile
启用swap文件
如果启用swap文件报错时,提示:swapon 失败:设备或资源忙
可以先关闭swap文件swapoff /var/swapfile
,之后在用swapon开启
5.使系统开机时自启用,在文件/etc/fstab中添加一行:
vi /etc/fstab
进入文件
/var/swapfile swap swap defaults 0 0
注:
1.权限不足记得在命令前面加上sudo
2.其中 /var/swapfile
为自定义交换分区路径,可以按照自己喜好命名
VPN(可选)
IKUUU VPN
注册后进入,右上角签到领流量,使用教程见左边【下载和教程】
其中教程的第三步
可能出现如下保报错
这是网络原因导致无法下载Country.mmdb文件
可以下载离线文件ikuuu vpn相关资源 包含Country.mmdb
第四步测速选择任意节点
点击这个【Clash Dashboard 】即可访问。
第五步需要配置设备的代理
这里http和https都需要写
其他
1.截图
截图工具安装sudo apt install flameshot
,运行flameshot gui
截图
2.解决apt-get安装中的E: Sub-process /usr/bin/dpkg returned an error code (1)
问题
cd /var/lib/dpkg/
sudo mv info/ info_bak # 现将info文件夹更名
sudo mkdir info # 再新建一个新的info文件夹
sudo apt-get update # 更新
sudo apt-get -f install # 修复
sudo mv info/* info_bak/ # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
sudo rm -rf info # 把自己新建的info文件夹删掉
sudo mv info_bak info # 把以前的info文件夹重新改回名
3.安装SQLite3
sudo apt-get install sqlite3 #安装数据库系统Sqlite3
sudo apt-get install libsqlite3-dev #安装Sqlite3数据库开发支持库
sudo apt-get install sqlitebrowser #安装Sqlite3图形化管理界面DB Browser for SQLite
sqlite3 --version #检查是否安装成功,如果成功,输入以下命令可显示SQLite3版本信息
4.关于Android Studio中的模拟器
想要把文件push到模拟器中,但是设备无法remount
- 检查环境变量是否配置
sudo vi /etc/profile
ANDROID_HOME="/Users/Android/sdk"
export PATH="$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/cmdline-tools/latest:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH"
source /etc/profile
echo $ANDROID_HOME
- 运行模拟器
# 进入到到模拟器的目录
cd /Users/Android/sdk/emulator/
# 查看模拟器名字
./emulator -list-avds
./emulator '@模拟器名字' -writable-system
5.VMware Workstation下载地址
VMware Workstation 17.0.0 Pro for Windows
百度网盘链接:https://pan.baidu.com/s/1gS2wjMPdZP1ISlhRL6-GTA?pwd=28ip
Name: VMware-workstation-full-17.0.0-20800274.exe
File size: 607.88 MB
Release Date: 2022-11-17
SHA256SUM: 977e44df8ad7ea6f80ca14a1f817a65a38bb1660d1b776d4ad80577d9d52c2c7
VMware Workstation 17.0.0 Pro for Linux
百度网盘链接:https://pan.baidu.com/s/1VI7TgLldpTxChrG8Wk_iPw?pwd=p69b
Name: VMware-Workstation-Full-17.0.0-20800274.x86_64.bundle
File size: 513.88 MB
Release Date: 2022-11-17
SHA256SUM: 9014e87066f5b60e62f9dbd698e68f7cf507c6b59c5fcfe86de2aa44647e9910
VMware Workstation 17.0.2 Pro for Windows
百度网盘链接:https://pan.baidu.com/s/1b03c0kEr9eOUMD3xp1Y7Og?pwd=fhhc
File size: 607.7 MB
Name: VMware-workstation-full-17.0.2-21581411.exe
Release Date: 2023-04-25
SHA256SUM: ab925cf5b7424b8f28bf65a5c388ce6f680dfeb157612ee6d6c3dd0a63100a40
VMware Workstation 17.0.2 Pro for Linux
百度网盘链接:https://pan.baidu.com/s/1FGcnsyebNGUhhkyxa1BBvQ?pwd=khis
File size: 513.94 MB
Name: VMware-Workstation-Full-17.0.2-21581411.x86_64.bundle
Release Date: 2023-04-25
SHA256SUM: f4e361faebcbe1818d1b16e93d7d6658ef0fe2828f529c334ec28a0493711cc7
VMware Workstation 17.5.0 Pro for Linux
VMware Workstation 17.5.0 Pro for Windows
VMware Workstation 17.5.0 Player for Linux 64-bit
VMware Workstation 17.5.0 Player for Windows 64-bit Operating Systems
VMware Workstation 17.5.1 Pro for Linux
VMware Workstation 17.5.1 Pro for Windows
VMware Workstation 17.5.2 Pro for Linux - for Personal Use (Free)
Filename: VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle
VMware Workstation 17.5.2 Pro for Windows - for Personal Use (Free)
Filename: VMware-workstation-full-17.5.2-23775571.exe
百度网盘链接:https://pan.baidu.com/s/1OdQrHZHkuvJ9epozw8tnZA?pwd=99c1
参考
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/