Setting Up Fastlane in an Android Project: Part 2
From a local automation tool to the foundation of a repeatable Android release workflow.
More importantly, we'll establish an architectural boundary: Gradle builds the application. Fastlane orchestrates the delivery workflow.
In Part 1, we looked at why release automation becomes important as Android projects grow.
Building an APK or AAB is rarely the hardest part. The complexity usually appears around the build: validation, signing, versioning, artifact handling, screenshots, metadata, distribution and eventually CI/CD.
That's where Fastlane becomes useful.
Instead of giving developers a collection of commands and asking them to remember the correct order, we can encode the workflow as automation.
This separation will become one of the most important ideas in the series.
Step 1: Install Fastlane
Fastlane is a Ruby-based automation platform used to automate many parts of the mobile application delivery lifecycle.
On macOS, Homebrew provides one of the simplest ways to install it:
brew install fastlane
You can also install Fastlane using RubyGems:
gem install fastlane
Getting Fastlane installed locally is only the first step. A release pipeline should eventually control its toolchain versions so that local development and CI/CD don't silently use different environments.
We'll revisit reproducibility when we move this workflow into CI/CD.
Verify the Installation
fastlane --version
If the command returns the installed Fastlane version, the installation is ready.
Step 2: Initialize Fastlane in Your Android Project
Fastlane configuration should live alongside the Android project it automates.
Navigate to your project root:
cd path/to/your/android-project
Then initialize Fastlane:
fastlane init
Fastlane will start an interactive setup process and create the configuration structure for the project.
fastlane init gives us a starting point.
It does not decide how our release process should be designed.
That responsibility belongs to us.
The Fastlane Directory
A typical Android Fastlane setup contains a fastlane directory:
fastlane/
├── Appfile
└── Fastfile
Fastfile
The Fastfile is where we define lanes and compose Fastlane actions into workflows.
Appfile
The Appfile stores application-specific information used by Fastlane, such as the Android package name.
Your release process should not exist inside someone's memory, terminal history or private documentation.
The Fastfile and other non-secret configuration should be version-controlled, reviewed and evolved alongside the application.
Step 3: Understand the Role of a Lane
A lane is a named automation workflow.
Instead of asking every developer to remember a sequence of Gradle commands, we can expose meaningful operations:
- test — run validation.
- build — create an application artifact.
- deploy — distribute an artifact.
- release — orchestrate multiple release stages.
This introduces an important principle:
not implementation details.
Step 4: Create Your First Android Lane
Let's create a simple lane that delegates the Android build to Gradle.
default_platform(:android)
platform :android do
desc "Build the release artifact"
lane :build_release do
gradle(
task: "assemble",
build_type: "Release"
)
end
end
You can execute the lane with:
fastlane build_release
Fastlane is not an alternative Android build system.
Gradle owns the Android build. Fastlane sits above it and coordinates the broader delivery workflow.
Breaking Down the Lane
- platform :android — identifies the target platform.
- lane :build_release — defines a named workflow.
- gradle(...) — delegates the Android build operation to Gradle.
Step 5: Separate Validation from Building
A release pipeline should not simply execute:
Validation should happen before an artifact becomes a candidate for distribution.
Create a dedicated validation lane:
lane :test do
gradle(
task: "test"
)
end
Run it with:
fastlane test
As the pipeline evolves, this lane can coordinate unit tests, lint, static analysis, instrumentation tests and other quality gates.
Fastlane doesn't replace Android's testing or analysis tools. It coordinates them as part of a larger delivery workflow.
Step 6: Compose a Release Workflow
We now have two independent operations:
- Validate the project.
- Build the release artifact.
We can compose them into a higher-level release workflow:
lane :release do
test
build_release
end
Now the workflow has an explicit sequence:
And the developer only needs to invoke:
fastlane release
We have moved from documenting a sequence of commands to encoding the sequence into the release system itself.
Step 7: Keep Deployment as a Separate Concern
Building an artifact and distributing an artifact are different operations.
That distinction becomes extremely important once we introduce Google Play tracks, approvals, credentials and CI/CD.
Fastlane can interact with Google Play using actions such as upload_to_play_store.
lane :deploy do
upload_to_play_store(
aab: "app/build/outputs/bundle/release/app-release.aab"
)
end
We won't build the complete Play Store deployment architecture yet. That deserves its own dedicated part of the series.
Because an artifact can be built without being immediately released.
This gives us room for verification, approval, staged rollout and environment-specific deployment strategies.
Step 8: Design for CI/CD Before You Need CI/CD
There is a useful test for release automation:
without relying on your memory?
If the answer is no, the workflow is still too dependent on the developer's environment.
The architecture we are building should eventually look like this:
GitHub Actions, Jenkins, GitLab CI and other CI platforms can invoke the same Fastlane lanes later.
That's why we're deliberately avoiding a giant script that only works on one developer machine.
A Note About Credentials and Secrets
As soon as deployment enters the picture, authentication becomes part of the release architecture.
Google Play deployments commonly use service-account based authentication with the appropriate Play Console permissions.
The important rule at this stage is simple:
Secrets must not be.
Authentication credentials should be supplied through secure mechanisms, especially when the workflow eventually runs inside CI/CD.
What Have We Built?
At this point, we have not built the entire release pipeline. And that's intentional.
We've built the foundation.
- Fastlane is installed and available locally.
- Fastlane configuration lives inside the Android project.
- Lanes represent meaningful release operations.
- Gradle remains responsible for Android builds.
- Validation and build operations can be composed into workflows.
- Deployment is treated as a separate concern.
- The workflow is designed with future CI/CD execution in mind.
The most important thing we created isn't the Fastfile.
We started converting an implicit release process into an explicit, version-controlled and composable workflow.
Foundation Checklist
Before moving forward, your project should satisfy these basics:
- Fastlane is installed and verified.
-
A
fastlanedirectory exists in the project. - Your Fastfile is committed to source control.
- You have a working validation lane.
- You have a working build lane.
- The release workflow composes those operations.
- No credentials or secrets are stored in Git.
Wrapping Up
Fastlane is now part of our Android project.
But we're not going to stop at:
The goal of this series is much bigger.
Design the release system.
In the next part, we'll go deeper into the build and release workflow: connecting Fastlane with Android build variants, artifacts and the operations that happen between "code merged" and "release delivered."
We'll connect Fastlane with real Android build variants, artifacts and release operations to build a more complete delivery workflow.
Continue the Fastlane Series
- Introduction to Fastlane in Android — Part 1
- Setting Up Fastlane in an Android Project — Part 2 — You are here.
- Automating Build and Release Process in Fastlane — Part 3
- Play Store Uploads with Fastlane Supply — Part 4
- Automating Screenshot Generation with Screengrab — Part 5
- Managing App Versioning and Changelogs — Part 6
- Integrating Fastlane with CI/CD Pipelines — Part 7
From installing Fastlane to designing a repeatable release workflow.
Comments
Post a Comment