Android
corsia di sorpasso
Ricerca…
Osservazioni
fastlane è uno strumento per gli sviluppatori iOS, Mac e Android per automatizzare attività noiose come la generazione di schermate, la gestione dei profili di provisioning e il rilascio della tua applicazione.
Documenti: https://docs.fastlane.tools/
Codice sorgente: https://github.com/fastlane/fastlane
Fastfile per creare e caricare più versioni su Beta da Crashlytics
Questa è una configurazione di Fastfile di esempio per un'app multi-flavor. Ti dà la possibilità di costruire e distribuire tutti i sapori o un singolo sapore. Dopo la distribuzione, riporta a Slack lo stato della distribuzione e invia una notifica ai tester in Beta dal gruppo di tester Crashlytics.
Per costruire e distribuire tutti i sapori utilizzare:
fastlane android beta
Per creare un singolo APK e distribuire l'uso:
fastlane android beta app:flavorName
Utilizzando un singolo file Fastlane, è possibile gestire app iOS, Android e Mac. Se si utilizza questo file solo per una platform
app non è richiesto.
Come funziona
- argomento
android
dice fastlane che useremo:android
piattaforma:android
. - All'interno
:android
piattaforma:android
è possibile avere più corsie. Attualmente, ho solo:beta
lane. Il secondo argomento del comando precedente specifica la corsia che vogliamo usare. -
options[:app]
- Ci sono due compiti Gradle . In primo luogo, funziona
gradle clean
. Se hai fornito un sapore con la chiaveapp
, fastfile eseguegradle assembleReleaseFlavor
. Altrimenti, eseguegradle assembleRelease
per costruire tutti i sapori di build. - Se stiamo costruendo per tutti i gusti, una serie di nomi di file APK generati viene archiviata in
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
. Lo usiamo per fare il loop dei file generati e distribuirli su Beta da Crashlytics .notifications
e i campi deigroups
sono facoltativi. Sono utilizzati per informare i tester registrati per l'app su Beta da Crashlytics . - Se hai familiarità con Crashlytics, potresti sapere che per attivare un'app nel portale, devi eseguirla su un dispositivo e usarla prima. Altrimenti, Crashlytics assumerà l'app inattiva e genererà un errore. In questo scenario, l'ho catturato e segnalato a Slack come un errore, quindi saprai quale app non è attiva.
- Se la distribuzione ha successo, fastlane invierà un messaggio di successo a Slack .
-
#{/([^\/]*)$/.match(apk)}
questo regex è usato per ottenere il nome di sapore dal percorso APK. Puoi rimuoverlo se non funziona per te. -
get_version_name
eget_version_code
sono due plugin di Fastlane per recuperare nome e codice della versione dell'app. Devi installare queste gemme se vuoi usarle o puoi rimuoverle. Leggi di più sui plugin qui. - La dichiarazione
else
verrà eseguita se si sta creando e distribuendo un singolo APK. Non dobbiamo fornireapk_path
a Crashlytics poiché abbiamo una sola app. -
error do
blocco dierror do
alla fine viene usato per ricevere una notifica se qualcosa va storto durante l'esecuzione.
Nota
Non dimenticare di sostituire SLACK_URL
, API_TOKEN
, GROUP_NAME
e BUILD_SECRET
con le tue credenziali.
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 lane per costruire e installare tutti gli aromi per un determinato tipo di build su un dispositivo
Aggiungi questa corsia al tuo Fastfile ed esegui fastlane installAll type:{BUILD_TYPE}
nella riga di comando. Sostituisci BUILD_TYPE
con il tipo di build che vuoi costruire.
Ad esempio: fastlane installAll type:Debug
Questo comando creerà tutte le caratteristiche del tipo specificato e lo installerà sul tuo dispositivo. Attualmente, non funziona se hai più di un dispositivo collegato. Assicurati di averne solo uno. In futuro ho intenzione di aggiungere un'opzione per selezionare il dispositivo di destinazione.
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