Поиск…


замечания

Fastlane - это инструмент для разработчиков iOS, Mac и Android для автоматизации утомительных задач, таких как создание скриншотов, настройка профилей подготовки и выпуск приложения.

Документы: https://docs.fastlane.tools/

Исходный код: https://github.com/fastlane/fastlane

Fastfile для создания и загрузки нескольких вариантов для бета-версии Crashlytics

Это пример настройки Fastfile для приложения с несколькими вкусами . Это дает вам возможность создавать и внедрять все вкусы или один аромат. После развертывания он сообщает Slack о статусе развертывания и отправляет уведомление тестировщикам в бета-тестировании группой тестировщиков Crashlytics.

Чтобы создавать и развертывать все варианты, используйте:

fastlane android beta

Для создания одного APK и развертывания используйте:

fastlane android beta app:flavorName

Используя один файл Fastlane, вы можете управлять приложениями iOS, Android и Mac. Если вы используете этот файл только для одной platform приложения, не требуется.

Как это устроено

  1. аргумент android говорит fastlane, что мы будем использовать :android платформу :android .
  2. Внутри платформы :android вы можете иметь несколько полос движения. В настоящее время у меня есть только :beta лейн. Второй аргумент из приведенной выше команды указывает полосу, которую мы хотим использовать.
  3. options[:app]
  4. Есть две задачи Gradle . Во-первых, он работает с gradle clean . Если вы предоставили аромат с ключом app , fastfile запускает gradle assembleReleaseFlavor . В противном случае он запускает gradle assembleRelease для создания всех gradle assembleRelease .
  5. Если мы строим для всех ароматов, массив сгенерированных имен файлов APK хранится внутри SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS . Мы используем это для циклического создания сгенерированных файлов и развертывания их в Beta с помощью Crashlytics . поля notifications и groups являются необязательными. Они используются для уведомления тестеров, зарегистрированных для приложения на бета-версии Crashlytics .
  6. Если вы знакомы с Crashlytics, вы можете знать, что для активации приложения на портале вы должны запустить его на устройстве и использовать его в первую очередь. В противном случае Crashlytics будет считать приложение неактивным и выдает ошибку. В этом случае я фиксирую его и сообщаю Slack как провал, поэтому вы узнаете, какое приложение неактивно.
  7. Если развертывание будет успешным, fastlane отправит сообщение успеха Slack .
  8. #{/([^\/]*)$/.match(apk)} это регулярное выражение используется для получения имени аромата из пути APK. Вы можете удалить его, если он не работает для вас.
  9. get_version_name и get_version_code - два плагина Fastlane для получения имени и кода версии приложения. Вы должны установить эти драгоценные камни, если хотите, или их можно удалить. Подробнее о плагинах здесь.
  10. Оператор else будет выполнен, если вы создаете и развертываете один APK. Нам не нужно предоставлять apk_path для Crashlytics, так как у нас есть только одно приложение.
  11. error do блок в конце используется для получения уведомления, если что-то еще не работает во время выполнения.

Заметка

Не забудьте заменить SLACK_URL , API_TOKEN , GROUP_NAME и BUILD_SECRET своими собственными учетными данными.

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 для создания и установки всех вариантов для данного типа сборки на устройство

Добавьте эту полосу в свой Fastfile и запустите fastlane installAll type:{BUILD_TYPE} в командной строке. Замените BUILD_TYPE на тип сборки, который вы хотите построить.

Например: fastlane installAll type:Debug

Эта команда построит все варианты данного типа и установит его на ваше устройство. В настоящее время он не работает, если у вас установлено более одного устройства. Убедитесь, что у вас есть только один. В будущем я планирую добавить опцию для выбора целевого устройства.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow