Recently, I needed to compile a custom Android kernel for a research project that required a newer kernel version (as well as a few kernel configs) than what was available from the standard Android emulator images.
It took a while for me to get things working properly so here are the steps I used as documentation.
The compilation process must be done with the toolchain provided by AOSP. A prebuilt version can be found at https://android.googlesource.com/platform/prebuilts/gcc/.
Set the following environmental variables on your build machine based on the target platform you are building for:
export ARCH=x86_64 export CROSS_COMPILE=x86_64-linux-android-
bin/ directory from the compiler toolchain repository should also be added to the path.
The goldfish kernel should be used when building for the Android emulator. The repository can be found at https://android.googlesource.com/kernel/goldfish.
There are multiple branches depending on which kernel version you wish to build. From my results, the
android-* branches do not work properly while the
android-goldfish-* branches do. If you have issues running your compiled kernel, try using another branch instead.
Generate a default kernel config before customizing it with
make menuconfig. You should end up with a working kernel at
arch/x86/boot/bzImage after running the following series of commands:
make x86_64_ranchu_defconfig make menuconfig make -j4
Start the AVD using the compiled kernel with the following command:
./emulator -avd <avd name> -kernel <bzImage> -show-kernel -no-snapshot-load -ranchu
The key flag here appears to be the
-ranchu flag, which tells the emulator to use the newer Ranchu engine instead of the old QEMU one. The emulator did not boot properly for me without that flag.
If you have any feedback or notice any errors in the post, I'd love to hear from you. You can find various ways of contacting me at the about me page!