Fastlane on Android
黃千碩 (Kros)
oSolve, Ltd./打⼯工趣
Mobile App Developer
Outline
• What is fastlane
• What to do
• How to use
• Details
• Fastlane in real-world
• 優缺點
What is Fastlane
• fastlane is the easiest way to automate beta deployments and
releases for your iOS and Android apps. 🚀 It handles all tedious
tasks, like generating screenshots, dealing with code signing, and
releasing your application.
• ⼀一個⼯工具,讓你可以⽤用很簡單的⽅方式發佈 Apps, 處理理 iOS code signing
等問題。
• 最初是為了了 iOS 開發,後來來才新增 Android。
What is Fastlane
• ⽤用 Ruby 開發的,
• Mac 可直接使⽤用。
• Windows 的朋友要有 Ruby 環境才可以使⽤用。
Why fastlane
• 應該是 Why Continuous Delivery
• 開發流程改變
• 建立專案的第⼀一天,下班前就要能夠發佈給其他⼈人測試
• ⽇日後專案掛上 CI Server 也可以使⽤用
• fastlane 是⼀一個新選擇,local/server 皆可使⽤用
How
• Gradle 上⼜又包⼀一層 Fastlane
Gradle
Fastlane
What to do
• Screenshots (⾃自動截圖、⾃自動上傳到 Google Play、處理理多國語系)
• Beta Deployment (⾃自動發佈到 Google Play Beta, Fabric)
• Release Deployment (⾃自動發佈到 Google Play)
What to do
• Screenshots (⾃自動截圖、⾃自動上傳到 Google Play)
• Beta Deployment (⾃自動發佈到 Google Play Beta, Fabric)
• Release Deployment (⾃自動發佈到 Google Play)
• 今天只討論最常⽤用的兩兩個功能
How to use
• 執⾏行行三步驟:
1. 安裝 fastlane
2. 設定好 fastlane 相關檔案參參數。
3. 在 Command Line 執⾏行行「⾃自⾏行行定義」的 fastlane 動作 (通常叫
lane)。
Setup
• 從 command line 切到專案⽬目錄底下
• fastlane init
Setup
• 多出 fastlane 資料夾
Fastlane Folder
• Appfile
• 放置參參數的地⽅方
• Fastfile
• ⾃自⾏行行定義的執⾏行行動作 (lanes)
Fastfile
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "assembleRelease")
crashlytics
end
Fastfile
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "assembleRelease")
crashlytics
end
• ⾃自定義⼀一個 lane
Fastfile
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "assembleRelease")
crashlytics
end
• 執⾏行行 gradle 的包版指令
Fastfile
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "assembleRelease")
crashlytics
end
• 上傳到 crashlytics (Fabric) beta
Fastfile
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "assembleRelease")
crashlytics
end
• 如何執⾏行行?
Fastfile
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "assembleRelease")
crashlytics
end
• 如何執⾏行行?
fastlane beta
Fastlane in Real World
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
ensure_git_status_clean
changelog_from_git_commits
start_git_flow_release
clean_project
test
build_staging
upload_to_fabric
clean_project
finish_git_flow_release
post_to_slack
end
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
ensure_git_status_clean
changelog_from_git_commits
start_git_flow_release
clean_project
test
build_staging
upload_to_fabric
clean_project
finish_git_flow_release
post_to_slack
end
Fastlane 提供的內建 lane
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
ensure_git_status_clean
changelog_from_git_commits
start_git_flow_release
clean_project
test
build_staging
upload_to_fabric
clean_project
finish_git_flow_release
post_to_slack
end
⾃自⾏行行定義的 lane
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
ensure_git_status_clean
changelog_from_git_commits
start_git_flow_release
clean_project
test
build_staging
upload_to_fabric
clean_project
finish_git_flow_release
post_to_slack
end
Lane
desc "Clean project"
lane :clean_project do
gradle(task: "clean")
end
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
ensure_git_status_clean
changelog_from_git_commits
start_git_flow_release
clean_project
test
build_staging
upload_to_fabric
clean_project
finish_git_flow_release
post_to_slack
end
Lane
desc "Build staging"
lane :build_staging do
gradle(
task: "assemble",
build_type: "beta",
flavor: “staging"
)
end
Private Lane
• ⼀一個不會被看到的 lane,就像 private method ⼀一樣。
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
ensure_git_status_clean
changelog_from_git_commits
start_git_flow_release
clean_project
test
build_staging
upload_to_fabric
clean_project
finish_git_flow_release
post_to_slack
end
Private Lane
desc "Git Flow Release Start"
private_lane :start_git_flow_release do
Dir.chdir ".." do
sh 'git flow release start "Release"'
end
end
Private Lane
desc "Git Flow Release Start"
private_lane :start_git_flow_release do
Dir.chdir ".." do
sh 'git flow release start "Release"'
end
end
Private Lane
desc "Git Flow Release Start"
private_lane :start_git_flow_release do
Dir.chdir ".." do
sh 'git flow release start "Release"'
end
end
• lane 裡⾯面可以執⾏行行 shell script
Read Config
desc "Upload to fabric beta"
private_lane :upload_to_fabric do
crashlytics(
api_token: ENV["CRASHLYTICS_API_TOKEN"],
build_secret: ENV["CRASHLYTICS_BUILD_SECRET"]
)
end
Read Config
desc "Upload to fabric beta"
private_lane :upload_to_fabric do
crashlytics(
api_token: ENV["CRASHLYTICS_API_TOKEN"],
build_secret: ENV["CRASHLYTICS_BUILD_SECRET"]
)
end
• 從 Appfile 讀出資料
Appfile
# CRASHLYTICS
ENV["CRASHLYTICS_API_TOKEN"]="xxx"
ENV["CRASHLYTICS_BUILD_SECRET"]="xxx"
Default Lane
before_all do
end
after_all do |lane|
end
error do |lane, exception|
end
Error handling
error do |lane, exception|
slack(
message: exception.message,
success: false
)
end
• 包版失敗,通知開發⼈人員
• 除了了 slack 之外,也可以⾃自⾏行行定義要做什什麼事情
Upload to Google Play
• 使⽤用 Supply
• 只能 upload and publish
• But!最需要的是 upload and save draft
• 看個⼈人需求
Fastlane actions
• 想知道 fastlane 還可以做什什麼



fastlane actions
Fastlane actions
Fastlane actions
• 想知道 fastlane 中的 gradle 可以做什什麼



fastlane actions gradle
Fastlane actions
優缺點
• 優點
• 與 iOS 共⽤用同⼀一個⼯工具
• 可⽤用 Ruby 做任何事情

(rename, move file, increase build number)
• 可以直接⽤用在 CI server 上
• Fabric 整合
優缺點
• 缺點
• 必須要有 ruby 環境 (Windows QQ)
• 額外學習 ruby 語⾔言 (團隊學習成本)
⼩小結
• 若若你尚未使⽤用包版⼯工具,可以考慮使⽤用 fastlane
• 若若同時開發 iOS 與 Android,可以考慮 fastlane
• 若若團隊的 build script 太複雜,可以考慮⽤用 fastlane 簡化
Reference
• Getting started with fastlane for Android

https://docs.fastlane.tools/getting-started/android/setup/
• Fastlane Github

https://github.com/fastlane/fastlane

Fastlane on Android 介紹

  • 1.
    Fastlane on Android 黃千碩(Kros) oSolve, Ltd./打⼯工趣 Mobile App Developer
  • 2.
    Outline • What isfastlane • What to do • How to use • Details • Fastlane in real-world • 優缺點
  • 3.
    What is Fastlane •fastlane is the easiest way to automate beta deployments and releases for your iOS and Android apps. 🚀 It handles all tedious tasks, like generating screenshots, dealing with code signing, and releasing your application. • ⼀一個⼯工具,讓你可以⽤用很簡單的⽅方式發佈 Apps, 處理理 iOS code signing 等問題。 • 最初是為了了 iOS 開發,後來來才新增 Android。
  • 4.
    What is Fastlane •⽤用 Ruby 開發的, • Mac 可直接使⽤用。 • Windows 的朋友要有 Ruby 環境才可以使⽤用。
  • 5.
    Why fastlane • 應該是Why Continuous Delivery • 開發流程改變 • 建立專案的第⼀一天,下班前就要能夠發佈給其他⼈人測試 • ⽇日後專案掛上 CI Server 也可以使⽤用 • fastlane 是⼀一個新選擇,local/server 皆可使⽤用
  • 6.
    How • Gradle 上⼜又包⼀一層Fastlane Gradle Fastlane
  • 7.
    What to do •Screenshots (⾃自動截圖、⾃自動上傳到 Google Play、處理理多國語系) • Beta Deployment (⾃自動發佈到 Google Play Beta, Fabric) • Release Deployment (⾃自動發佈到 Google Play)
  • 8.
    What to do •Screenshots (⾃自動截圖、⾃自動上傳到 Google Play) • Beta Deployment (⾃自動發佈到 Google Play Beta, Fabric) • Release Deployment (⾃自動發佈到 Google Play) • 今天只討論最常⽤用的兩兩個功能
  • 9.
    How to use •執⾏行行三步驟: 1. 安裝 fastlane 2. 設定好 fastlane 相關檔案參參數。 3. 在 Command Line 執⾏行行「⾃自⾏行行定義」的 fastlane 動作 (通常叫 lane)。
  • 10.
    Setup • 從 commandline 切到專案⽬目錄底下 • fastlane init
  • 11.
  • 12.
    Fastlane Folder • Appfile •放置參參數的地⽅方 • Fastfile • ⾃自⾏行行定義的執⾏行行動作 (lanes)
  • 13.
    Fastfile desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do gradle(task: "assembleRelease") crashlytics end
  • 14.
    Fastfile desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do gradle(task: "assembleRelease") crashlytics end • ⾃自定義⼀一個 lane
  • 15.
    Fastfile desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do gradle(task: "assembleRelease") crashlytics end • 執⾏行行 gradle 的包版指令
  • 16.
    Fastfile desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do gradle(task: "assembleRelease") crashlytics end • 上傳到 crashlytics (Fabric) beta
  • 17.
    Fastfile desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do gradle(task: "assembleRelease") crashlytics end • 如何執⾏行行?
  • 18.
    Fastfile desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do gradle(task: "assembleRelease") crashlytics end • 如何執⾏行行? fastlane beta
  • 19.
  • 20.
    desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do ensure_git_status_clean changelog_from_git_commits start_git_flow_release clean_project test build_staging upload_to_fabric clean_project finish_git_flow_release post_to_slack end
  • 21.
    desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do ensure_git_status_clean changelog_from_git_commits start_git_flow_release clean_project test build_staging upload_to_fabric clean_project finish_git_flow_release post_to_slack end Fastlane 提供的內建 lane
  • 22.
    desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do ensure_git_status_clean changelog_from_git_commits start_git_flow_release clean_project test build_staging upload_to_fabric clean_project finish_git_flow_release post_to_slack end ⾃自⾏行行定義的 lane
  • 23.
    desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do ensure_git_status_clean changelog_from_git_commits start_git_flow_release clean_project test build_staging upload_to_fabric clean_project finish_git_flow_release post_to_slack end
  • 24.
    Lane desc "Clean project" lane:clean_project do gradle(task: "clean") end
  • 25.
    desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do ensure_git_status_clean changelog_from_git_commits start_git_flow_release clean_project test build_staging upload_to_fabric clean_project finish_git_flow_release post_to_slack end
  • 26.
    Lane desc "Build staging" lane:build_staging do gradle( task: "assemble", build_type: "beta", flavor: “staging" ) end
  • 27.
    Private Lane • ⼀一個不會被看到的lane,就像 private method ⼀一樣。
  • 28.
    desc "Submit anew Beta Build to Crashlytics Beta" lane :beta do ensure_git_status_clean changelog_from_git_commits start_git_flow_release clean_project test build_staging upload_to_fabric clean_project finish_git_flow_release post_to_slack end
  • 29.
    Private Lane desc "GitFlow Release Start" private_lane :start_git_flow_release do Dir.chdir ".." do sh 'git flow release start "Release"' end end
  • 30.
    Private Lane desc "GitFlow Release Start" private_lane :start_git_flow_release do Dir.chdir ".." do sh 'git flow release start "Release"' end end
  • 31.
    Private Lane desc "GitFlow Release Start" private_lane :start_git_flow_release do Dir.chdir ".." do sh 'git flow release start "Release"' end end • lane 裡⾯面可以執⾏行行 shell script
  • 32.
    Read Config desc "Uploadto fabric beta" private_lane :upload_to_fabric do crashlytics( api_token: ENV["CRASHLYTICS_API_TOKEN"], build_secret: ENV["CRASHLYTICS_BUILD_SECRET"] ) end
  • 33.
    Read Config desc "Uploadto fabric beta" private_lane :upload_to_fabric do crashlytics( api_token: ENV["CRASHLYTICS_API_TOKEN"], build_secret: ENV["CRASHLYTICS_BUILD_SECRET"] ) end • 從 Appfile 讀出資料
  • 34.
  • 35.
    Default Lane before_all do end after_alldo |lane| end error do |lane, exception| end
  • 36.
    Error handling error do|lane, exception| slack( message: exception.message, success: false ) end • 包版失敗,通知開發⼈人員 • 除了了 slack 之外,也可以⾃自⾏行行定義要做什什麼事情
  • 37.
    Upload to GooglePlay • 使⽤用 Supply • 只能 upload and publish • But!最需要的是 upload and save draft • 看個⼈人需求
  • 38.
    Fastlane actions • 想知道fastlane 還可以做什什麼
 
 fastlane actions
  • 39.
  • 40.
    Fastlane actions • 想知道fastlane 中的 gradle 可以做什什麼
 
 fastlane actions gradle
  • 41.
  • 42.
    優缺點 • 優點 • 與iOS 共⽤用同⼀一個⼯工具 • 可⽤用 Ruby 做任何事情
 (rename, move file, increase build number) • 可以直接⽤用在 CI server 上 • Fabric 整合
  • 43.
    優缺點 • 缺點 • 必須要有ruby 環境 (Windows QQ) • 額外學習 ruby 語⾔言 (團隊學習成本)
  • 44.
    ⼩小結 • 若若你尚未使⽤用包版⼯工具,可以考慮使⽤用 fastlane •若若同時開發 iOS 與 Android,可以考慮 fastlane • 若若團隊的 build script 太複雜,可以考慮⽤用 fastlane 簡化
  • 45.
    Reference • Getting startedwith fastlane for Android
 https://docs.fastlane.tools/getting-started/android/setup/ • Fastlane Github
 https://github.com/fastlane/fastlane