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

  1. android argument vertelt fastlane dat we zullen gebruiken :android platform.
  2. 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.
  3. options[:app]
  4. Er zijn twee Gradle- taken. Ten eerste loopt het gradle clean . Als je een smaak met app toets hebt opgegeven, draait gradle assembleReleaseFlavor . Anders wordt het gradle assembleRelease het gradle assembleRelease om alle build-smaken te bouwen.
  5. 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 voor notifications en groups zijn optioneel. Ze worden gebruikt om testers op de hoogte te brengen die voor Crashlytics zijn geregistreerd voor de app op Beta .
  6. 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.
  7. Als de implementatie succesvol is, stuurt fastlane een succesbericht naar Slack .
  8. #{/([^\/]*)$/.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.
  9. get_version_name en get_version_code zijn twee Fastlane- plug-ins om de app- get_version_name en get_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.
  10. De instructie else wordt uitgevoerd als u een enkele APK bouwt en implementeert. We hoeven geen apk_path aan Crashlytics te bieden, omdat we maar één app hebben.
  11. 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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow