0

トラビスとファストレーンを使用してGoogle Playストアにアプリを構築して公開していますが、同時に複数のフレーバーを処理するとき、それらをアップロードする。複数のフレーバーを作成し、FastlaneからGoogle PlayにデプロイするときにApkパスがエクスポートされない

これは私のfastfileです:

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 configを実行すると、正しく動作しますが、この方法で1つのフレーバしか公開できず、フレーバが動的に生成されます。

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

lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS]を各APKのパスで正しく更新するにはどうすればよいですか?

答えて

0

私が取ったアプローチは、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 
関連する問題