下述操作系统均为 Manjaro 20.02 。编译源码版本为Android 9.0 . 内核版本为goldfish-4.14
Android源码编译 下载源码 编译配置 1 2 3 4 5 6 7 8 9 # 在ArchLinux下需要主动配置 export LC_ALL=C #在 /usr/lib/locale 目录下生成C.UTF-8文件夹 locale_gen #在Ubuntu下 不需要执行改操作
编译环境 ArchLinux 1 2 3 4 5 6 # 在ArchLinux下的配置 sudo pacman -S jdk8-openjdk export JAVA_HOME=/usr/lib/jvm/java-8-openjdk sudo pacman -S aosp-devel # 自动安装源码编译所依赖的库
Ubuntu18.04 1 2 3 4 5 6 7 8 # 在Ubuntu下配置 sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev
编译过程 ArchLinux 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 进入Android源码目录 cd /source #设置python虚拟环境 virtualenv2 --system-site-packages venv source venv/bin/activate #此时在 (venv) 下继续执行编译流程 # 开始编译 source build/envsetup.sh # 选择平台 lunch # 一般选择 aosp_x86-eng #开始编译 根据CPU配置而定 make -j16
Ubuntu 1 2 3 4 5 6 7 8 9 10 11 12 # 进入Android源码目录 cd /source # 开始编译 source build/envsetup.sh # 选择平台 lunch # 一般选择 aosp_x86-eng #开始编译 根据CPU配置而定 make -j16
启动虚拟机 ArchLinux
Ubuntu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # 第一次启动时可能会遇到KVM异常 Please ensure KVM is properly installed and usable. CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm) # 或者如下异常 #需要使用如下解决方案 参考 https://blog.csdn.net/csusunxgg/article/details/81060890 # (1)安装 Qemu-KVM 和 cpu-checker sudo apt-get install qemu-kvm cpu-checker# (2)查看系统 KVM 是否可用 $ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used# (3)创建 kvm 用户组并把当前登录用户(如 king )添加到 kvm 用户组 sudo addgroup kvm sudo usermod -a -G kvm king# (4)改变 /dev/kvm 用户组为 kvm sudo chgrp kvm /dev/kvm# (5)创建 udev rule,并写入 KERNEL=="kvm" , GROUP="kvm" , MODE="0660" sudo gedit /etc/udev/rules.d/60-qemu-kvm.rules KERNEL=="kvm", GROUP="kvm", MODE="0660"# (6)重启电脑再运行 emulator #电脑重启后,继续执行 emulator
内核编译 下载源码 1 2 3 4 mkdir kernel# 下面镜像任选其一 # Android原始镜像 自己想办法下 git clone https://android.googlesource.com/kernel/goldfish.git
编译源码 1 2 3 4 5 6 7 cd goldfish # 列出当前支持的分支 git branch -a # 查询当前虚拟机的内核版本为4.4 git checkout remotes/origin/android-goldfish-4.4-dev
分支切换完成后,需要实现一个编译脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 # 命名为build.sh 放于goldfish目录下 #指定编译平台 上一步编译的虚拟机为 x86 export ARCH=x86# 指定的gcc编译器的前缀, 就是下面PATH中的x86_64-linux-android-4.9的前缀 export CROSS_COMPILE=x86_64-linux-android- export REAL_CROSS_COMPILE=x86_64-linux-android-# 这里android_root要写是android根目录的绝对地址例如: ~/google/android-9.0 PATH=$PATH:android_root/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin# 编译的配置,在arch/x86/configs目录下, make x86_64_ranchu_defconfig# 编译内核命令 make
执行./build.sh
开始编译
编译完成后会生成一个文件在arch/x86/boot/bzImage
启动虚拟机(设置内核) 1 emulator -kernel kernel/goldfish/arch/x86/boot/bzImage
虚拟机相关 Native Debug 调试Android源码 内核Debug 其他异常记录 问题记录:
Android Studio “/dev/kvm device: permission denied”
解决方案:https://blog.csdn.net/firestart/article/details/80527672
zhenghuan@zhenghuan-MS-7B53:~$ sudo chown zhenghuan -R /dev/kvm
参考链接 Arch Wiki