Mobile Continuous Integration Solutions

When buddybuild was acquired by Apple on January 2nd, the Rocket Android projects had a new problem to solve. As part of the acquisition, buddybuild would no longer support Android projects on March 1st. That gave us just under two months to research alternatives, implement them, and then make sure no projects had issues along the way. These are some thoughts after doing research in January, migrating in February, and working without buddybuild since then.

After some quick research, we decided to try out these services:

One note is that a hosted Jenkins solution could very well be the optimal solution for a client or project. Often though, we want something that a client doesn't need to administer themselves.

CircleCI took a bit of configuration, but was clearly powerful and had many backend options as well beyond mobile. The big issue there was setting up virtual device testing. Signing an apk for release or distribution was also not as easy as it could’ve been compared to Bitrise or buddybuild.

Travis CI also took some configuration and despite documentation about virtual device testing, it never worked as expected. I wasn't able to get it running after following different examples and trying different configurations. Other team members have had much more success with Travis, so it's worth revisiting, especially because it too supports more than mobile builds.

App Center's first build wasn't promising. It failed even though it was building a trivial app at the time. After restarting, it worked, but that was a bit disenfranchised.

Nevercode had an easy setup, but it was unclear how to configure APK signing or virtual devices. The first build took quite some time, long enough that I thought it had failed.

Bitrise had everything that we were using in buddybuild and ended up being perfect for our needs. It was easy to find steps to run virtual device testing, sign APKs, and send Slack notifications to specific channels. We also had some custom steps to run additional Kotlin linting and use different Firebase accounts for different versions of the app and those were all also easy to set up.

In the weeks since moving to Bitrise, it's had everything we've needed. Here's an additional aside: when Android Studio was updated to 3.1 recently and managed to take JCenter down while everyone was retrieving dependencies, Bitrise continued building smoothly even while some developers had issues on their local machines.