Android
Fastlane
Szukaj…
Uwagi
fastlane to narzędzie dla programistów systemów iOS, Mac i Android do automatyzacji żmudnych zadań, takich jak generowanie zrzutów ekranu, obsługa profili udostępniania i wypuszczanie aplikacji.
Dokumenty: https://docs.fastlane.tools/
Kod źródłowy: https://github.com/fastlane/fastlane
Fastfile do tworzenia i przesyłania wielu wersji smakowych do wersji beta przez Crashlytics
To jest przykładowa konfiguracja Fastfile dla aplikacji obsługującej wiele smaków. Daje ci możliwość zbudowania i wdrożenia wszystkich smaków lub jednego smaku. Po wdrożeniu zgłasza Slackowi status wdrożenia i wysyła powiadomienie do testerów w wersji beta przez grupę testerów Crashlytics.
Aby zbudować i wdrożyć wszystkie smaki, użyj:
fastlane android beta
Aby zbudować jeden pakiet APK i wdrożyć, użyj:
fastlane android beta app:flavorName
Za pomocą jednego pliku Fastlane możesz zarządzać aplikacjami na iOS, Android i Mac. Jeśli używasz tego pliku tylko dla jednej aplikacji, platform
nie jest wymagana.
Jak to działa
- argument
android
mówi fastlane, że użyjemy:android
platformy:android
. - Wewnątrz
:android
platforma:android
może mieć wiele pasów. Obecnie mam tylko:beta
ścieżkę:beta
. Drugi argument z powyższego polecenia określa linię, której chcemy użyć. -
options[:app]
- Istnieją dwa zadania Gradle . Po pierwsze, działa w
gradle clean
. Jeśli podałeś smak kluczemapp
, fastfile uruchamiagradle assembleReleaseFlavor
. W przeciwnym razie działagradle assembleRelease
aby zbudować wszystkie smaki kompilacji. - Jeśli budujemy dla wszystkich smaków, tablica wygenerowanych nazw plików APK jest przechowywana wewnątrz
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
. Używamy tego, aby przeglądać wygenerowane pliki i wdrażać je w Beta przez Crashlytics . polanotifications
igroups
są opcjonalne. Służą do powiadamiania testerów zarejestrowanych dla aplikacji w wersji beta przez Crashlytics . - Jeśli znasz Crashlytics, możesz wiedzieć, że aby aktywować aplikację w portalu, musisz uruchomić ją na urządzeniu i najpierw z niej korzystać. W przeciwnym razie Crashlytics uzna, że aplikacja jest nieaktywna i zgłosi błąd. W tym scenariuszu wychwytuję go i zgłaszam Slackowi jako awarię, abyś wiedział, która aplikacja jest nieaktywna.
- Jeśli wdrożenie się powiedzie, Fastlane wyśle komunikat o powodzeniu do Slacka .
-
#{/([^\/]*)$/.match(apk)}
ten regex służy do uzyskania nazwy smaku ze ścieżki APK. Możesz go usunąć, jeśli to nie działa. -
get_version_name
iget_version_code
to dwie wtyczki Fastlane do pobierania nazwy wersji i kodu aplikacji. Musisz zainstalować te klejnoty, jeśli chcesz ich użyć, lub możesz je usunąć. Przeczytaj więcej o wtyczkach tutaj. - Instrukcja
else
zostanie wykonana, jeśli budujesz i wdrażasz pojedynczy pakiet APK. Nie musimy podawaćapk_path
Crashlytics, ponieważ mamy tylko jedną aplikację. -
error do
block na końcu służy do otrzymywania powiadomień, jeśli coś innego pójdzie nie tak podczas wykonywania.
Uwaga
Nie zapomnij zastąpić SLACK_URL
, API_TOKEN
, GROUP_NAME
i BUILD_SECRET
własnymi danymi uwierzytelniającymi.
fastlane_version "1.46.1"
default_platform :android
platform :android do
before_all do
ENV["SLACK_URL"] = "https://hooks.slack.com/servic...."
end
lane :beta do |options|
# Clean and build the Release version of the app.
# Usage `fastlane android beta app:flavorName`
gradle(task: "clean")
gradle(task: "assemble",
build_type: "Release",
flavor: options[:app])
# If user calls `fastlane android beta` command, it will build all projects and push them to Crashlytics
if options[:app].nil?
lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |
puts "Uploading APK to Crashlytics: " + apk
begin
crashlytics(
api_token: "[API_TOKEN]",
build_secret: "[BUILD_SECRET]",
groups: "[GROUP_NAME]",
apk_path: apk,
notifications: "true"
)
slack(
message: "Successfully deployed new build for #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}",
success: true,
default_payloads: [:git_branch, :lane, :test_result]
)
rescue => ex
# If the app is inactive in Crashlytics, deployment will fail. Handle it here and report to slack
slack(
message: "Error uploading => #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}: #{ex}",
success: false,
default_payloads: [:git_branch, :lane, :test_result]
)
end
end
after_all do |lane|
# This block is called, only if the executed lane was successful
slack(
message: "Operation completed for #{lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].size} app(s) for #{get_version_name} - #{get_version_code}",
default_payloads: [:git_branch, :lane, :test_result],
success: true
)
end
else
# Single APK upload to Beta by Crashlytics
crashlytics(
api_token: "[API_TOKEN]",
build_secret: "[BUILD_SECRET]",
groups: "[GROUP_NAME]",
notifications: "true"
)
after_all do |lane|
# This block is called, only if the executed lane was successful
slack(
message: "Successfully deployed new build for #{options[:app]} #{get_version_name} - #{get_version_code}",
default_payloads: [:git_branch, :lane, :test_result],
success: true
)
end
end
error do |lane, exception|
slack(
message: exception.message,
success: false,
default_payloads: [:git_branch, :lane, :test_result]
)
end
end
end
Linia Fastfile do kompilacji i instalacji wszystkich smaków dla danego typu kompilacji na urządzeniu
Dodaj ten pas do pliku Fastfile i uruchom polecenie fastlane installAll type:{BUILD_TYPE}
w wierszu polecenia. Zamień BUILD_TYPE
na typ kompilacji, który chcesz zbudować.
Na przykład: fastlane installAll type:Debug
To polecenie zbuduje wszystkie smaki danego typu i zainstaluje je na twoim urządzeniu. Obecnie nie działa, jeśli masz podłączone więcej niż jedno urządzenie. Upewnij się, że masz tylko jeden. W przyszłości planuję dodać opcję wyboru urządzenia docelowego.
lane :installAll do |options|
gradle(task: "clean")
gradle(task: "assemble",
build_type: options[:type])
lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |
puts "Uploading APK to Device: " + apk
begin
adb(
command: "install -r #{apk}"
)
rescue => ex
puts ex
end
end
end