<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Bitrise vs. CircleCI for Android in a Head-to-Head Battle | Infinum</title>
		<atom:link href="https://infinum.com/blog/bitrise-vs-circleci-for-android-in-a-head-to-head-battle/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/bitrise-vs-circleci-for-android-in-a-head-to-head-battle/</link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 10 Apr 2026 14:51:20 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>7915https://infinum.com/uploads/2019/07/bitrise-vs-circleci-for-android-in-a-head-to-head-battle-0.webp</url>
				</image>
				<title>Bitrise vs. CircleCI for Android in a Head-to-Head Battle</title>
				<link>https://infinum.com/blog/bitrise-vs-circleci-for-android-in-a-head-to-head-battle/</link>
				<pubDate>Tue, 06 Aug 2019 10:45:00 +0000</pubDate>
				<dc:creator>Josip Krnjić</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/bitrise-vs-circleci-for-android-in-a-head-to-head-battle/</guid>
				<description>
					<![CDATA[<p>The best CI is the one that engineers waste the least time on so they can focus on development more. Is Bitrise it?</p>
<p>The post <a href="https://infinum.com/blog/bitrise-vs-circleci-for-android-in-a-head-to-head-battle/">Bitrise vs. CircleCI for Android in a Head-to-Head Battle</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-208"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	In mobile development, usually, developers are the ones who will set up and maintain CI/CD. In that sense, the best CI is the one they waste the least time on so they can focus on development more.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	The Android team here at Infinum have been using CircleCI for a few years and <strong>recently migrated the majority of projects to Bitrise</strong>—a newer continuous integration and delivery (CI/CD) service made for mobile apps. This means that it’s focused just on that and provides great service in that field.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	On the other hand, while <strong>CircleCI</strong> provides a more generic solution suitable for any type of project, it might require just a bit more configuration.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-102">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-103'
	>
	Pricing</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	In CircleCI’s free option you get one container with 1000 build minutes per month. Meanwhile, the free option in Bitrise features somewhat limiting 10 minutes per build.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-108">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-109'
	>
	For concurrencies, both Bitrise and Circle have similar pricing:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-111"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-112">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2019/07/bitrise-vs-circleci-for-android-in-a-head-to-head-battle-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="786"
															width="1150"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-114">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-115'
	>
	If you need 2 or 3 concurrencies, you might want to consider the difference in the pricing, as Circle can be cheaper. Otherwise, both are in the similar price range so that shouldn’t be the deciding factor.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-117">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-118'
	>
	Performance</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-120">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-121'
	>
	There’s no point in comparing the pricing without looking at what you get for the money.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-123">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-124'
	>
	Both machines have similar Intel Xeon and you’ll get 2 vCPU. The only difference is that on Bitrise you’re getting 8GB of RAM compared to Circle 4GB, which can be a big deal. These are the standard options and you can pay for additional ones.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-126">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-127'
	>
	Need more power? Bitrise standard option with 8GB of RAM should be enough for most projects. If you need more power, you can get elite machines which are pretty much double the resources (4 vCPU, 16GB RAM) for double the money.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-129">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-130'
	>
	This doesn’t mean that your build times will be two times as fast. Gradle tasks don’t fully utilize all the resources and multithreading so from our experience you can expect about 20% faster builds.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-134"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-132">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-133'
	>
	On CircleCI, the standard option with 4GB might just not be enough for some bigger projects. Unlike Bitrise that has only 2 options (standard and elite), CircleCI has 5 resource classes:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-137"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-135">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-136'
	>
	<li>Small: 1vCPU and 2GB RAM</li><li>Medium (default): 2 vCPU and 4GB RAM</li><li>Medium+: 3 vCPU and 6GB RAM</li><li>Large: 4 vCPU and 8GB RAM</li><li>XLarge: 8 vCPU and 16GB RAM</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-140"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-138">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-139'
	>
	Something you should be aware of is that there is no public pricing for CircleCI resource classes. You need to personally contact them to gain access. In our case, we got them for free for a limited time but then got unpleasantly surprised with the full price of the extra resources.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-143"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-141">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-142'
	>
	Ease of use</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-146"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-144">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-145'
	>
	The way CI was setup usually involved writing configuration files in JSON or YAML notation. For bigger projects, this config file would grow to levels that are hard to maintain.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-149"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-147">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-148'
	>
	Bitrise has a somewhat different approach to configuration. To start with, you don’t need to have a configuration file in your repo—you can just hold it in their web app. But Bitrise’s edge is the visual configuration editor which makes the whole setup much easier.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-152"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-150">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-151'
	>
	Each step is represented as one block in the editor. And with this, you don’t need to edit configuration files directly, you can just click through the visual editor. This is also much easier for developers who have never worked with a CI before. It takes time to learn how to read and write configuration file, and the editor is self-explanatory. Some of my colleagues didn’t like this editor as they were used to handwriting YAML files and didn’t want to switch. They can still continue to write files without using the visual editor.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-155"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-153"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-154">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2019/07/bitrise-vs-circleci-for-android-in-a-head-to-head-battle-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="777"
															width="1364"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-158"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-156">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-157'
	>
	Bitrise comes with the library of steps which contains a lot of predefined steps you might need, like Install missing Android dependencies, Android Build, Android Lint, etc. You can write your own step and open a request to merge it into the library.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-161"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-159">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-160'
	>
	Similar to the Bitrise library of steps are the CircleCI orbs. You have a public registry of orbs. Orbs are part of CircleCI 2.1, so they are a pretty recent thing. The problem I see here is that users don’t really need orbs and don’t want to bother updating to 2.1, so the adoption of orbs is low. Currently, there is just one useful orb for Android while on Bitrise there already are a lot of useful steps, with new ones coming regularly.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-164"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-162">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-163'
	>
	One thing I would like to see is the possibility to write and share a step internally within the organization, which currently isn’t possible on either Bitrise or CircleCI.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-167"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-165">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-166'
	>
	Parallelism</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-170"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-168">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-169'
	>
	For some projects, we need to build several flavors of application. For these, we use parallel builds. Both Bitrise and CircleCI support parallel builds and are easy to set up. For Bitrise, you would have one workflow that initiates all the parallel workflows and waits for them to finish. This way, one container will always be used just to wait for others, which is not the case on CircleCI. That’s a plus for Circle!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-173"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-171">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-172'
	>
	UI Testing</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-176"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-174">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-175'
	>
	UI testing has always been one of the trickier things to set up on your CI/CD servers. A few years back, you had to create emulator image and start it, run UI tests, and then read text reports and somehow fetch that result back into the CI report.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-179"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-177">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-178'
	>
	There was a lot of room for this process to fail just because something went wrong while starting an emulator, and then your tests would be reported as failed. Plus, running emulator required a lot of resources on the build server.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-182"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-180">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-181'
	>
	In 2016, Firebase Test Lab was announced, which made things easier because it eliminated the need to work with an emulator. Still, it continued to be a pretty lengthy setup. There were multiple requirements—a Firebase project, hooking up the Google Cloud keys (for remote access to your project), and then running a few commands to send apk and run tests. This was the standard procedure in CircleCI, and this alone would add 30 lines to your .yml configuration.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-185"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-183">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-184'
	>
	With Bitrise, setting up UI testing is simple as it gets. There are two steps ready: “Android Build for UI Testing” and “[BETA] Virtual Device Testing”. You add these and that’s it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-188"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-186"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-auto" data-id="es-187">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2019/07/bitrise-vs-circleci-for-android-in-a-head-to-head-battle-3.webp"
					class="image__img block-media__image-img"
					alt=""
										height="194"
															width="470"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-191"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-189">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-190'
	>
	Google Play Deploy</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-194"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-192">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-193'
	>
	If you want to fully automate the whole process, you will probably want to deploy directly to Play Store from your build server. Using CircleCI, the best approach would be either to use fastlane or some bash script you can find online that does all the communication with Play Store to publish the .apk.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-197"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-195">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-196'
	>
	This is simplified on Bitrise with Google Play Deploy step. It accepts .apk or .aab and Play Store Service Account JSON (which is required for any remote access to the Play Store). So there’s another plus for Bitrise!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-200"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-198">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-199'
	>
	And the winner is…</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-203"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-201">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-202'
	>
	Bitrise workflow editor is a really innovative approach that saves us from .yml files and brings a simple interface that I enjoy using. The focus on mobile development is a big advantage and I can see this paying off even more in the future.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-206"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-204">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-205'
	>
	CircleCI looks to be taking a different approach. With 2.x, there are some changes that you really don’t need but can be very helpful in complex environments. Finally, if you don’t have a CI/CD and you are doing mobile development, Bitrise should be your first choice.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/bitrise-vs-circleci-for-android-in-a-head-to-head-battle/">Bitrise vs. CircleCI for Android in a Head-to-Head Battle</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>