【问题标题】:Apk path not exported when building multiple flavors and deploying to Google Play from Fastlane构建多种风格并从 Fastlane 部署到 Google Play 时未导出 Apk 路径
【发布时间】:2018-03-08 01:07:29
【问题描述】:

我正在使用 Travis 和 Fastlane 构建我的应用并将其发布到 Google Play 商店,但是当同时处理多种风格时,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

任务发布白标代码为:

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'
)

如何使用构建的每个 apk 的路径正确更新 lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS]

【问题讨论】:

    标签: android android-gradle-plugin continuous-integration android-productflavors fastlane


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 2023-04-01
      • 2018-04-08
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      相关资源
      最近更新 更多