Android
fastlane
Zoeken…
Opmerkingen
fastlane is een hulpmiddel voor iOS-, Mac- en Android-ontwikkelaars om vervelende taken te automatiseren, zoals het genereren van screenshots, het omgaan met voorzieningenprofielen en het vrijgeven van uw applicatie.
Documenten: https://docs.fastlane.tools/
Broncode: https://github.com/fastlane/fastlane
Fastfile om meerdere smaken te bouwen en te uploaden naar Beta by Crashlytics
Dit is een voorbeeld van een Fastfile- configuratie voor een app met meerdere smaken. Het geeft je een optie om alle smaken of een enkele smaak te bouwen en in te zetten. Na de implementatie rapporteert het aan Slack de status van de implementatie en stuurt het een melding aan testers in Beta door Crashlytics testersgroep.
Gebruik alle smaken om te bouwen en te implementeren:
fastlane android beta
Om een enkele APK te bouwen en te gebruiken:
fastlane android beta app:flavorName
Met één Fastlane-bestand kunt u iOS-, Android- en Mac-apps beheren. Als u dit bestand gebruikt, is slechts één app- platform
niet vereist.
Hoe het werkt
-
android
argument vertelt fastlane dat we zullen gebruiken:android
platform. - Binnen
:android
platform kunt u meerdere rijstroken hebben. Momenteel heb ik alleen:beta
rijstrook. Het tweede argument van de bovenstaande opdracht geeft de rijstrook aan die we willen gebruiken. -
options[:app]
- Er zijn twee Gradle- taken. Ten eerste loopt het
gradle clean
. Als je een smaak metapp
toets hebt opgegeven, draaitgradle assembleReleaseFlavor
. Anders wordt hetgradle assembleRelease
hetgradle assembleRelease
om alle build-smaken te bouwen. - Als we voor alle smaken bouwen, wordt een reeks gegenereerde APK-bestandsnamen opgeslagen in
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
. We gebruiken dit om door gegenereerde bestanden te bladeren en ze te implementeren naar Beta by Crashlytics . velden voornotifications
engroups
zijn optioneel. Ze worden gebruikt om testers op de hoogte te brengen die voor Crashlytics zijn geregistreerd voor de app op Beta . - Als u bekend bent met Crashlytics, weet u misschien dat om een app in de portal te activeren, u deze op een apparaat moet uitvoeren en eerst moet gebruiken. Anders zal Crashlytics ervan uitgaan dat de app inactief is en een foutmelding geeft. In dit scenario leg ik het vast en rapporteer ik het als een storing aan Slack , zodat u weet welke app inactief is.
- Als de implementatie succesvol is, stuurt fastlane een succesbericht naar Slack .
-
#{/([^\/]*)$/.match(apk)}
deze regex wordt gebruikt om de smaaknaam van het APK-pad te krijgen. U kunt het verwijderen als het niet voor u werkt. -
get_version_name
enget_version_code
zijn twee Fastlane- plug-ins om de app-get_version_name
enget_version_code
op te halen. Je moet deze edelstenen installeren als je wilt gebruiken, of je kunt ze verwijderen. Lees hier meer over plug-ins. - De instructie
else
wordt uitgevoerd als u een enkele APK bouwt en implementeert. We hoeven geenapk_path
aan Crashlytics te bieden, omdat we maar één app hebben. -
error do
block aan het einde wordt gebruikt om een melding te krijgen als er iets anders misgaat tijdens de uitvoering.
Notitie
Vergeet niet om SLACK_URL
, API_TOKEN
, GROUP_NAME
en BUILD_SECRET
te vervangen door uw eigen gegevens.
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-rij om alle smaken voor een bepaald build-type op een apparaat te bouwen en te installeren
Voeg deze rij toe aan uw Fastfile en voer fastlane installAll type:{BUILD_TYPE}
in de opdrachtregel. Vervang BUILD_TYPE
door het BUILD_TYPE
dat u wilt bouwen.
Bijvoorbeeld: fastlane installAll type:Debug
Met deze opdracht worden alle smaken van het gegeven type gemaakt en op uw apparaat geïnstalleerd. Momenteel werkt het niet als u meer dan één apparaat hebt aangesloten. Zorg ervoor dat je er maar één hebt. In de toekomst ben ik van plan om een optie toe te voegen om het doelapparaat te selecteren.
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