Путь Apk не экспортируется при создании нескольких вариантов и развертывании в Google Play из Fastlane

Я использую Travis и Fastlane для создания и публикации своего приложения в Google Play Store, но при одновременной работе с несколькими вариантами Supply не может найти APK для их загрузки.

Это мой фастфайл:

fastlane_version "2.59.0"

default_platform :android

platform :android do

  before_all do
      gradle(task: "clean")
  end

  desc "Submit Whitelabels to Play Store"
  lane :whitelabels_playstore do
      gradle(
          task: 'releaseWhitelabel'
      )

    lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |
        puts "Uploading APK to Play Store: " + apk
        begin
            supply(
                skip_upload_images: true,
                skip_upload_screenshots: true,
                validate_only: true,
                apk: apk
            )
        rescue => ex
            puts ex
        end
    end
  end
end

Код releaseWhitelabel задачи:

def releaseTask = tasks.create(name: 'releaseWhitelabel') {
  group 'Whitelabel'
  description "Assembles and release all Whitelabels"
}

android.applicationVariants.all { variant ->
  if (variant.buildType.name == 'release') {

    variant.productFlavors.each { flavor ->
      def flavorName = flavor.name.capitalize()
      def releaseFlavorTaskName = "releaseWhitelabel${flavorName}"
      def releaseFlavorTask

      flavorsMap.each { name, jsonItem ->
        if (flavorName.toUpperCase().startsWith(name.toUpperCase())) {

          releaseFlavorTask = tasks.create(name: releaseFlavorTaskName) {
            group 'Whitelabel'
            description "Assembles and release build for flavor $flavorName"
          }
          releaseFlavorTask.dependsOn variant.assemble
          releaseTask.dependsOn releaseFlavorTask
        }
      }
    }
  }
}

Задача отлично работает при локальном запуске, когда я выполняю полосу, я получаю сообщение об ошибке, что lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] не может быть нулевым.

Когда я запускаю следующую конфигурацию gradle, я работаю правильно, но только один вариант может быть опубликован таким образом, и мои ароматы генерируются динамически.

gradle(
    task: 'assemble',
    flavor: 'Dell',
    build_type: 'Release'
)

Как я могу правильно обновить lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] с указанием пути каждого построенного apk?


person silvio.pereira    schedule 26.09.2017    source источник


Ответы (1)


Подход, который я использовал, заключался в том, чтобы контролировать все белые метки с помощью файла JSON и получать оттуда данные.

  lane :whitelabels_playstore do
    gradle(
        task: "whitelabelRelease"
    )

    begin
      # Retrieving Flavors from JSON file
      require "json"
      file = File.read "../buildsystem/whitelabels.json"
      data = JSON.parse(file)

      # Supply will deploy each flavor to Play Store
      data['list'].each do | whitelabel |

      begin
        supply(
            // application_id_suffix is provided by JSON file
            package_name: "my.app.package.#{whitelabel['application_id_suffix']}",
            skip_upload_images: true,
            skip_upload_screenshots: true,
            // flavor_nameis provided by JSON file
            apk: "app/build/outputs/apk/app-#{whitelabel['flavor_name']}-release.apk"
        )
        rescue => ex
          puts ex

          slack(
              message: "Error uploading => #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}: #{ex}",
              slack_url: "SLACK_HOOK_URL",
              success: false,
              default_payloads: [:git_branch, :lane, :test_result]
          )
        end
      end

      rescue => ex
        puts ex
    end
  end
person silvio.pereira    schedule 09.10.2017