Earlier I used to build busybox on my Android device itself, but it soon posed an obstacle, as I could only support ARM architecture. So I decided to delve in the cross compiling business. I use custom-built buildroot toolchains using uClibc C-library to get the smallest and full-featured busybox binaries possible. This helped me support all the Android architectures available.
Open GApps busybox integration
Initially mfonville reached out to me for building a
busybox binary with lzip support included as he was trying out lzma compression over xz, because xz embedded in the busybox binary wasn’t fully functional. Finally it was decided that the installer will stick with xz as lzip was much slower and provided almost the same level of compression compared to xz. But the xz-embedded code that is part of the busybox source tree, was more of a hindrance because of its limitations and errors. So I was asked if I could also build an
xzdec binary for the Open GApps project.
Bugs and Issues
Then came up an issue on github where Tegra 2 device owners were getting “illegal instructions” error. Soon we realized that NEON support was the culprit here. Apparently even a modern SoC such as Tegra 2 lacked something as subtle as NEON support in their devices. The toolchain I built was configured to have VFPV3 support with NEON by default. So as simple as it may sound the solution was to build a toolchain without NEON support and using that to build busybox which was much easier said than done.
I also assisted the project by building the infozip’s
zip binary for advanced APK manipulation. Soon there was a hiccup in the working of this zip binary. MFonville and I invested a lot of time in bug hunting and it all came down to a nasty little variable
$ZIP that was misleading the zip program. It was also addressed by XDA member osm0sis in his post.
Head over to my XDA thread for more information about my busybox binaries and their latest version.