Android
carril rápido
Buscar..
Observaciones
fastlane es una herramienta para desarrolladores de iOS, Mac y Android para automatizar tareas tediosas como generar capturas de pantalla, tratar con perfiles de aprovisionamiento y lanzar su aplicación.
Docs: https://docs.fastlane.tools/
Código fuente: https://github.com/fastlane/fastlane
Archivo rápido para crear y cargar múltiples versiones a Beta by Crashlytics
Este es un ejemplo de configuración de Fastfile para una aplicación de múltiples sabores. Te da la opción de crear e implementar todos los sabores o un solo sabor. Después de la implementación, informa a Slack el estado de la implementación y envía una notificación a los evaluadores en Beta por el grupo de evaluadores de Crashlytics.
Para construir y desplegar todos los sabores usa:
fastlane android beta
Para construir un solo APK y desplegar uso:
fastlane android beta app:flavorName
Con un solo archivo Fastlane, puede administrar aplicaciones iOS, Android y Mac. Si está utilizando este archivo solo para una platform
aplicaciones no es necesario.
Cómo funciona
-
android
argumento deandroid
le dice a Fastlane que usaremos:android
plataforma:android
. - En el interior
:android
plataforma de:android
puede tener varios carriles. Actualmente solo tengo:beta
lane. El segundo argumento del comando anterior especifica el carril que queremos usar. -
options[:app]
- Hay dos tareas de Gradle . Primero, corre
gradle clean
. Si proporcionó un sabor con la clave de laapp
, fastfile ejecutagradle assembleReleaseFlavor
. De lo contrario, ejecutagradle assembleRelease
para compilar todos los sabores de compilación. - Si estamos construyendo para todos los tipos, una matriz de nombres de archivos APK generados se almacena en
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
. Usamos esto para recorrer los archivos generados y desplegarlos en Beta por Crashlytics .notifications
campos denotifications
ygroups
son opcionales. Se utilizan para notificar a los probadores registrados para la aplicación en Beta por Crashlytics . - Si está familiarizado con Crashlytics, puede que sepa que para activar una aplicación en el portal, debe ejecutarla en un dispositivo y usarla primero. De lo contrario, Crashlytics asumirá la aplicación inactiva y lanzará un error. En este escenario, lo capturo e informo a Slack como un error, por lo que sabrá qué aplicación está inactiva.
- Si la implementación es exitosa, fastlane enviará un mensaje de éxito a Slack .
-
#{/([^\/]*)$/.match(apk)}
esta expresión regular se usa para obtener el nombre del sabor de la ruta APK. Puede eliminarlo si no funciona para usted. -
get_version_name
yget_version_code
son dos complementos de Fastlane para recuperar el nombre y el código de la versión de la aplicación. Tienes que instalar estas gemas si quieres usarlas, o puedes eliminarlas. Lea más acerca de los complementos aquí. - La instrucción
else
se ejecutará si está creando y desplegando un único APK. No tenemos que proporcionarapk_path
a Crashlytics ya que solo tenemos una aplicación. -
error do
block al final se usa para recibir notificaciones si algo sale mal durante la ejecución.
Nota
No olvide reemplazar SLACK_URL
, API_TOKEN
, GROUP_NAME
y BUILD_SECRET
con sus propias credenciales.
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 para crear e instalar todos los sabores para un tipo de compilación dado en un dispositivo
Agregue este carril a su archivo Fastfile y ejecute fastlane installAll type:{BUILD_TYPE}
en la línea de comandos. Reemplace BUILD_TYPE
con el tipo de compilación que desea compilar.
Por ejemplo: fastlane installAll type:Debug
Este comando construirá todos los sabores del tipo dado y lo instalará en su dispositivo. Actualmente, no funciona si tiene más de un dispositivo conectado. Asegúrate de tener solo uno. En el futuro, estoy planeando agregar una opción para seleccionar el dispositivo de destino.
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