Android
voie rapide
Recherche…
Remarques
fastlane est un outil pour les développeurs iOS, Mac et Android qui permet d'automatiser les tâches fastidieuses telles que la génération de captures d'écran, le traitement des profils d'approvisionnement et la publication de votre application.
Docs: https://docs.fastlane.tools/
Code source: https://github.com/fastlane/fastlane
Fastfile pour créer et télécharger plusieurs versions de Beta par Crashlytics
Ceci est un exemple de configuration de Fastfile pour une application multi-saveur. Cela vous donne la possibilité de créer et de déployer toutes les saveurs ou une seule saveur. Après le déploiement, il signale à Slack le statut du déploiement et envoie une notification aux testeurs de la version bêta du groupe de testeurs Crashlytics.
Pour créer et déployer toutes les saveurs, utilisez:
fastlane android beta
Pour créer un seul APK et déployer, utilisez:
fastlane android beta app:flavorName
En utilisant un seul fichier Fastlane, vous pouvez gérer les applications iOS, Android et Mac. Si vous utilisez ce fichier, une seule platform
- platform
applications n'est pas requise.
Comment ça marche
-
android
argumentandroid
dit fastlane que nous allons utiliser:android
plateforme:android
. - À l'intérieur
:android
plateforme:android
, vous pouvez avoir plusieurs voies. Actuellement, je n'ai que:beta
lane. Le second argument de la commande ci-dessus spécifie la voie que nous voulons utiliser. -
options[:app]
- Il y a deux tâches Gradle . Tout d'abord, il fonctionne
gradle clean
. Si vous avez fourni une saveur avec une clé d'app
, fastfile exécutegradle assembleReleaseFlavor
. Sinon, il exécutegradle assembleRelease
pour générer toutes lesgradle assembleRelease
de build. - Si nous construisons pour tous les goûts, un tableau de noms de fichiers APK générés est stocké dans
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
. Nous l'utilisons pour parcourir les fichiers générés et les déployer sur Beta par Crashlytics .notifications
champs denotifications
et degroups
sont facultatifs. Ils sont utilisés pour informer les testeurs enregistrés pour l'application sur la version bêta de Crashlytics . - Si vous connaissez Crashlytics, vous savez peut-être que pour activer une application sur le portail, vous devez l'exécuter sur un périphérique et l'utiliser en premier. Sinon, Crashlytics assumera l'inactivité de l'application et générera une erreur. Dans ce scénario, je le capture et le signale à Slack comme un échec. Vous saurez ainsi quelle application est inactive.
- Si le déploiement réussit, fastlane enverra un message de réussite à Slack .
-
#{/([^\/]*)$/.match(apk)}
cette regex est utilisée pour obtenir le nom de saveur du chemin APK. Vous pouvez le supprimer si cela ne fonctionne pas pour vous. -
get_version_name
etget_version_code
sont deux plugins Fastlane permettant de récupérer le nom et le code de la version de l'application. Vous devez installer ces gemmes si vous voulez utiliser, ou vous pouvez les supprimer. En savoir plus sur les plugins ici. - L'instruction
else
sera exécutée si vous construisez et déployez un seul APK. Nous n'avons pas à fournirapk_path
à Crashlytics car nous n'avons qu'une seule application. -
error do
bloc à la fin est utilisé pour être averti si quelque chose ne va pas pendant l'exécution.
Remarque
N'oubliez pas de remplacer SLACK_URL
, API_TOKEN
, GROUP_NAME
et BUILD_SECRET
par vos propres informations d'identification.
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
Ligne Fastfile pour créer et installer toutes les versions d'un type de construction donné sur un périphérique
Ajoutez cette voie à votre Fastfile et exécutez fastlane installAll type:{BUILD_TYPE}
en ligne de commande. Remplacez BUILD_TYPE
par le type de construction que vous souhaitez générer.
Par exemple: fastlane installAll type:Debug
Cette commande va générer toutes les versions d'un type donné et l'installer sur votre appareil. Actuellement, cela ne fonctionne pas si vous avez plusieurs périphériques connectés. Assurez-vous que vous n'en avez qu'un. À l'avenir, je prévois d'ajouter une option pour sélectionner le périphérique cible.
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