Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Fastlane: Android Deployments on Steroids
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ragunath Jawahar
February 25, 2017
Programming
0
170
Fastlane: Android Deployments on Steroids
Presented in Feb '17 Blrdroid meetup.
https://www.meetup.com/blrdroid/events/237112474
Ragunath Jawahar
February 25, 2017
Tweet
Share
More Decks by Ragunath Jawahar
See All by Ragunath Jawahar
Single-responsibility principle meets the real world! (Dubai Edition)
ragunathjawahar
0
62
Single-responsibility principle meets the real world!
ragunathjawahar
0
160
Making sense of large Java and Kotlin classes
ragunathjawahar
1
290
Building Robust Software, Episode 3
ragunathjawahar
1
180
Building Robust Software, Episode 2
ragunathjawahar
1
140
Building Robust Software (Episode 1)
ragunathjawahar
1
380
Speed as a workplace habit
ragunathjawahar
1
330
Building Robust Apps (Swift Edition)
ragunathjawahar
0
280
Re-architecture
ragunathjawahar
0
500
Other Decks in Programming
See All in Programming
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
990
AWS Infrastructure as Code の新機能 2025 総まとめ 〜SA 4人による怒涛のデモ祭り〜
konokenj
10
3.4k
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
1
100
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
510
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8.1k
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
460
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
130
CSC307 Lecture 15
javiergs
PRO
0
250
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
230
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
130
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
290
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
140
The Invisible Side of Design
smashingmag
302
51k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
270
Color Theory Basics | Prateek | Gurzu
gurzu
0
250
Paper Plane (Part 1)
katiecoart
PRO
0
5.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
GitHub's CSS Performance
jonrohan
1032
470k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.4k
Odyssey Design
rkendrick25
PRO
2
550
Transcript
Fastlane Android Deployments on Steroids Ragunath Jawahar
None
• The “release” engineer is on leave • That bug
fix is not worth a release • Shipped a wrong build variant • I want the latest build “Right NOW” • You make daily builds • Someone help me with the screenshots • Want to be a more efficient engineer
Installing & Setting Up
https://fastlane.tools sudo gem install fastlane
fastlane init
Fastfile • Can and usually has multiple lanes • Each
lane is composed of various Fastlane actions • Actions communicate using the “lane context”
Beta Deployment
β Checklist • Version bump • Commit and push •
Build • Upload for Distribution • Release Notes • Communicate
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
lane :beta do increment_version_code gradle(task: "clean") gradle(task: "assembleRelease") supply(track: "beta")
commit_android_version_bump changelog_from_git_commits slack push_to_git_remote end
fastlane android beta
None
None
Release Deployment
fastlane supply init
Release Checklist • Run tests • Take Screenshots • Build
• Upload for Distribution
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
lane :release do gradle(task: ”assembleDebug assembleAndroidTest") screengrab(locales: [‘en-US’, ‘fr-FR’]) gradle(task:
”clean") gradle(task: "assembleRelease") supply end
fastlane android release
Screengrab
public void screenshotOffersScreen() { onView(withId(R.id.offers)).perform(click()); Screengrab.screenshot("offers"); }
public void screenshotOffersScreen() { onView(withId(R.id.offers)).perform(click()); Screengrab.screenshot("offers"); }
None
What else?
• Send command-line parameters • Extend Fastfile by adding your
own methods • Badge app icons • Check if your working directory is clean • Send a tweet
fastlane actions --platform android fastlane action [name] fastlane search_plugins
ragunathjawahar GitHub / Gmail / Twitter