0

Travis와 Fastlane을 사용하여 내 앱을 제작하고 Google Play 스토어에 게시하지만 여러 맛을 동시에 처리 할 때 Supply가 APK를 찾을 수 없습니다. 업로드 할 수 있습니다.여러 가지 맛을 구축하고 Fastlane에서 Google Play에 배포 할 때 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 코드는 다음과 같습니다 :

내 fastfile입니다

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(
    task: 'assemble', 
    flavor: 'Dell', 
    build_type: 'Release' 
) 

어떻게 각 APK의 경로가 제대로 업데이트 lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] 내장을 가질 수있다?

답변

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