Android
Überholspur
Suche…
Bemerkungen
fastlane ist ein Tool für iOS-, Mac- und Android-Entwickler, mit dem Sie mühsame Aufgaben wie das Erstellen von Screenshots, das Bereitstellen von Profilen und das Freigeben Ihrer Anwendung automatisieren können.
Dokumente: https://docs.fastlane.tools/
Quellcode: https://github.com/fastlane/fastlane
Fastfile zum Erstellen und Hochladen mehrerer Versionen von Beta von Crashlytics
Dies ist ein Beispiel für ein Fastfile- Setup für eine App mit mehreren Geschmacksrichtungen. Sie haben die Möglichkeit, alle Geschmacksrichtungen oder eine einzelne Variante zu erstellen und bereitzustellen. Nach der Bereitstellung meldet es Slack den Status der Bereitstellung und sendet eine Benachrichtigung an die Tester in der Beta-Gruppe von Crashlytics-Testern.
Um alle Varianten zu erstellen und bereitzustellen, verwenden Sie:
fastlane android beta
Um ein einzelnes APK zu erstellen und bereitzustellen, verwenden Sie Folgendes:
fastlane android beta app:flavorName
Mit einer einzigen Fastlane-Datei können Sie iOS-, Android- und Mac-Apps verwalten. Wenn Sie diese Datei nur für eine App- platform
ist dies nicht erforderlich.
Wie es funktioniert
-
android
Argument sagt fastlane, dass wir verwenden werden:android
Plattform. - Innerhalb
:android
Plattform können Sie mehrere Bahnen haben. Derzeit habe ich nur:beta
Spur. Das zweite Argument des obigen Befehls gibt die Spur an, die wir verwenden möchten. -
options[:app]
- Es gibt zwei Gradle- Aufgaben. Erstens läuft es
gradle clean
. Wenn Sie einenapp
Schlüssel eingegeben haben, wird FastFilegradle assembleReleaseFlavor
. Andernfalls wirdgradle assembleRelease
, um alle Build-Geschmacksrichtungen zu erstellen. - Wenn Sie für alle Flavours erstellen, wird ein Array von generierten APK-Dateinamen in
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
gespeichert. Wir verwenden dies, um die erzeugten Dateien durchzugehen und sie von Crashlytics für Beta bereitzustellen .notifications
undgroups
Felder sind optional. Sie werden verwendet, um von Crashlytics für Beta registrierte Tester zu benachrichtigen. - Wenn Sie mit Crashlytics vertraut sind, wissen Sie möglicherweise, dass Sie zum Aktivieren einer App im Portal sie auf einem Gerät ausführen und zuerst verwenden müssen. Andernfalls geht Crashlytics davon aus, dass die App inaktiv ist, und gibt einen Fehler aus. In diesem Szenario fange ich es auf und melde mich als fehlgeschlagen an Slack , sodass Sie wissen, welche App inaktiv ist.
- Wenn die Bereitstellung erfolgreich ist, sendet fastlane eine Erfolgsmeldung an Slack .
-
#{/([^\/]*)$/.match(apk)}
Dieser Regex wird verwendet, um den Flavour-Namen aus dem APK-Pfad zu erhalten. Sie können es entfernen, wenn es für Sie nicht funktioniert. -
get_version_name
undget_version_code
sind zwei Fastlane- Plugins, um den Namen und Code der App-Version abzurufen. Sie müssen diese Edelsteine installieren, wenn Sie sie verwenden möchten, oder Sie können sie entfernen. Lesen Sie hier mehr über Plugins. - Die
else
Anweisung wird ausgeführt, wenn Sie einen einzelnen APK erstellen und bereitstellen. Wir müssen keinenapk_path
für Crashlytics bereitstellen, da wir nur eine App haben. -
error do
Block am Ende wird verwendet, um benachrichtigt zu werden, wenn während der Ausführung etwas anderes schief geht.
Hinweis
Vergessen Sie nicht, SLACK_URL
, API_TOKEN
, GROUP_NAME
und BUILD_SECRET
durch Ihre eigenen Anmeldeinformationen zu ersetzen.
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
Fastfile-Spur zum Erstellen und Installieren aller Flavors für einen bestimmten Build-Typ auf einem Gerät
Fügen Sie diese Spur Ihrem Fastfile hinzu und führen Sie fastlane installAll type:{BUILD_TYPE}
in der Befehlszeile. Ersetzen Sie BUILD_TYPE
durch den Build-Typ, den Sie erstellen möchten.
Zum Beispiel: fastlane installAll type:Debug
Dieser Befehl erstellt alle Varianten des angegebenen Typs und installiert sie auf Ihrem Gerät. Derzeit funktioniert es nicht, wenn Sie mehr als ein Gerät angeschlossen haben. Stellen Sie sicher, dass Sie nur einen haben. In Zukunft plane ich, eine Option zur Auswahl des Zielgeräts hinzuzufügen.
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