{{indexmenu_n>15}}
====== Edge1 Build Android ======
===== Introduction =====
This document mainly introduces how to compile the Android source code. You will learn how to compile different versions of android source code.
===== Preparation =====
* [[http://source.android.com/source/initializing.html]]
* [[.download-android-source-code]]
* [[.install-toolchains]]
===== Building =====
Before you start to build, make sure you have done all the Preperations listed above.
Build U-Boot:
```shell
$ cd PATH_YOUR_PROJECT
$ cd u-boot
$ make mrproper
$ ./make.sh kedge
```
Build kernel:
```shell
$ cd PATH_YOUR_PROJECT
$ cd kernel
$ make ARCH=arm64 kedge_defconfig android-10.config rk3399.config
$ make ARCH=arm64 rk3399-khadas-edge-android.img -jN
```
Build Android:
```shell
$ cd PATH_YOUR_PROJECT
$ source build/envsetup.sh
$ lunch rk3399_Android10-userdebug
$ make installclean
$ make -jN
$ ./mkimage.sh
```
Replace ''N'' as the number you want when you run ''make -jN''.
After executing ''./mkimage.sh'', generate a complete firmware package in the ''rockdev/Image-xxx/directory''(xxx is the product name of the specific lunch).
```
rockdev/Image-xxx/
├── MiniLoaderAll.bin
├── boot.img
├── dtbo.img
├── kernel.img
├── misc.img
├── oem.img
├── parameter.txt
├── pcba_small_misc.img
├── pcba_whole_misc.img
├── recovery.img
├── resource.img
├── system.img
├── trust.img
├── uboot.img
├── update.img
├── vbmeta.img
├── super.img
└── vendor.img
```
Packing update.img:
```shell
$ cd PATH_YOUR_PROJECT
$ source build/envsetup.sh
$ lunch rk3399_Android10-userdebug
$ ./pack_image.sh
```
Build U-Boot:
```shell
$ cd PATH_YOUR_PROJECT
$ cd u-boot
$ make mrproper
$ ./make.sh kedge
```
Build kernel:
```shell
$ cd PATH_YOUR_PROJECT
$ cd kernel
$ make ARCH=arm64 kedge_defconfig -jN
$ make ARCH=arm64 rk3399-khadas-edge-android.img -jN
```
Build Android:
```shell
$ cd PATH_YOUR_PROJECT
$ source build/envsetup.sh
$ lunch rk3399-userdebug
$ make installclean
$ make -jN
$ ./mkimage.sh
```
Replace ''N'' as the number you want when you run ''make -jN''.
After executing ''./mkimage.sh'', generate a complete firmware package in the ''rockdev/Image-xxx/directory''(xxx is the product name of the specific lunch).
```
rockdev/Image-xxx/
├── MiniLoaderAll.bin
├── boot.img
├── dtbo.img
├── kernel.img
├── misc.img
├── oem.img
├── parameter.txt
├── pcba_small_misc.img
├── pcba_whole_misc.img
├── recovery.img
├── resource.img
├── system.img
├── trust.img
├── uboot.img
├── update.img
├── vbmeta.img
```
Packing update.img:
```shell
$ cd PATH_YOUR_PROJECT
$ source build/envsetup.sh
$ lunch rk3399-userdebug
$ ./pack_image.sh
```
Build U-Boot:
```shell
$ cd PATH_YOUR_PROJECT
$ cd uboot
$ make kedge_defconfig
$ make ARCHV=aarch64
```
Build kernel:
```shell
$ cd PATH_YOUR_PROJECT
$ cd kernel
$ make ARCH=arm64 kedge_defconfig -jN
$ make ARCH=arm64 rk3399-khadas-edge-android.img -jN
```
Build Android:
```shell
$ cd PATH_YOUR_PROJECT
$ source build/envsetup.sh
$ lunch rk3399_all-userdebug
$ make installclean
$ make -jN
$ ./mkimage.sh
```
Replace ''N'' as the number you want when you run ''make -jN''.
After executing ''./mkimage.sh'', generate a complete firmware package in the ''rockdev/Image-xxx/directory'' (xxx is the product name of the specific lunch).
```
rockdev/Image-xxx/
├── boot.img
├── kernel.img
├── misc.img
├── parameter.txt
├── recovery.img
├── resource.img
├── RK3399MiniLoaderAll.bin
├── system.img
├── trust.img
└── uboot.img
```
Packing ''update.img'':
```shell
$ cd PATH_YOUR_PROJECT
$ source build/envsetup.sh
$ lunch rk3399_all-userdebug
$ ./pack_image.sh
```
===== See Also =====
* [[/products/sbc/edge1/install-os/install-os-into-emmc-via-usb-tool|Install OS Into eMMC via USB Tool]]
* [[/products/sbc/edge1/install-os/install-os-into-external-storage|Install OS into External Storage]]