Android_SDK源码编译
编译环境
在PC上搭建环境,对 Android/Linux SDK进行编译。
环境准备
在PC上安装Ubuntu,进行SDK编译。
- 硬件:PC满足RAM ≥ 16 GB,CPU core ≥ 4,Hard Drive ≥ 500GB
- 软件:Ubuntu22.04,虚拟机磁盘空间分配 ≥ 200GB
依赖安装
1. 进入Ubuntu,打开Terminal,切换为root用户。

2. 依次输入下列命令安装依赖。
sudo apt install git bc bison build-essential curl flex libsdl1.2-dev
sudo apt install g++-multilib gcc-multilib gnupg gperf libncurses5-dev
sudo apt install imagemagick lib32ncurses5-dev lib32readline-dev squashfs-tools
sudo apt install lib32z1-dev liblz4-tool xsltproc libssl-dev libwxgtk3.0-gtk3-dev
sudo apt install libxml2 libxml2-utils schedtool lzop pngcrush rsync
sudo apt install yasm zip zlib1g-dev python3 device-tree-compiler
sudo apt install python-pip gawk openjdk-8-jdk u-boot-tools patchelf expect
sudo pip install pyelftools
SDK源码获取
Note
1. 源码不可放在共享目录下编译
2. 编译主机不可用ROOT账号登陆
1. 点击下载SDK,拷贝源码压缩包到编译主机目录。
2. 进入源码所在目录,输入命令解压,等待解压完成。
Warning
Adroid_SDK 压缩包≥ 25GB,解压时请确保虚拟机磁盘剩余空间 ≥ 100GB。

3. 进入解压生成的h618-android12.0目录,输入命令恢复源码。

首次编译配置
首次编译需要配置编译环境,后续SDK位置不改变,无需重复配置。
1. 进入解压完成后的文件夹,输入以下命令。
will lunch sdk
You're building on Linux
Lunch menu...pick a combo:
1. BoardConfig-kickpi-k2b-tablet.mk
2. BoardConfig-kickpi-k2b-tv.mk
3. BoardConfig-kickpi-k2c-tablet.mk
4. BoardConfig-kickpi-k2c-tv.mk
Which would you like? [0]: //根据板型和所需系统选择
Note
BoardConfig-kickpi-'boadr'-'desktop'
board:主板 k2b / k2c
desktop:桌面 tv / tablet
编译完整镜像
Warning
如果编译Android失败,没有明显报错,可以修改build.sh中Android编译的进程数,将make -j32减小至你设备的实际情况。
1. 进入h618-android12.0目录,输入命令。

2. 编译完成,找到镜像目录。
Tip
镜像生成目录:longan/out/update-h618-xxxx.img

单独编译分区镜像
Tip
设备树路径:h618-android12.0/longan/device/config/chips/h618/configs/p2/linux-5.4/
镜像生成目录:longan/out/update-h618-xxxx.img
- 单独编译Uboot
- 单独编译Kernel
- 单独编译Android
- 配置内核
常见问题
- Ubuntu 22.04无法打开Terminal ?
在虚拟机页面按下ctrl+alt+F3,进入命令行模式,按照图示进行操作。

将en_US改为en_US.UTF-8,保存退出,输入reboot重启。

- 安卓编译失败?
编译安卓时失败且没有明显错误报错,修改一下内容尝试重新编译。

- APP 文件编译不生效?
android 为惰性编译,直接替换后编译,一些APP、文件不一定编译到镜像中,可以通过如下其中一种方式解决: 1. make installclean。 2. rm out/target/product/apollo-p2/xxx/xxx。 3. 编译的条件发生变化(比如文件名、APK名)。
- 全部编译替换不生效?
由于惰性编译,一些编译目标或依赖直接替换文件,在编译时不会拷贝生效。 编译前需要先手动清除: