2017-11-12 11 views
0

に名前を変更、私はmapping.txtをコピーして名前を変更したいです。Gradleのコピーと私はそれぞれの味のためのAndroidメーカー3.</p> <p>で働いているループ

マイGradleのタスク:私はdeployディレクトリに何をしたいです

task deployApks(type: Copy) { 
     android.applicationVariants.all { variant -> 
      if (variant.buildType.name == 'release') { 
      variant.outputs.all { 
        def flavor = variant.productFlavors.name.get(0) 

        def dirApk = System.getProperty("user.dir") + '/app/build/' + flavor + '/release/' 
        def dirMapping = System.getProperty("user.dir") + '/app/build/outputs/mapping/' + flavor + '/release/' 

        //copy apk and mapping.txt 
        from dirApk, dirMapping 
        include '*-release.apk', 'mapping.txt' 
        into dirDeploy 

        //rename mapping.txt 
        from dirDeploy 
        include 'mapping.txt' 
        into dirDeploy 
        rename 'mapping.txt', 'mapping-' + flavor + '.txt' 
        println("Rename mapping.txt tomapping-" + flavor + ".txt") 
      } 
     } 
    } 
} 

  • flavor1-release.apk

  • マッピング-flavor1.txt

  • flavor2 -release.apk

  • マッピング-flavor2.txt

私は何を得る:

  • flavor1-release.apk

  • マッピング-flavor1.txt

  • flavor2リリース.apk

gradle copy asynchronousですか?

すべてのコピー後に名前の変更が行われたようです。タスクがあるアクション(あなたが使用Copy含む)

タスクを(

  • 初期
  • 設定
  • 実行:

+0

フルグラデルスクリプトですか?どこに 'コピ​​ー'が定義されていますか? – Opal

+0

こんにちは、私は完全なタスクスクリプトを追加しました。 – rcperso

答えて

0

あなたは知らないかもしれないが、Gradleのビルドは3つの段階で構成されてい順番に実行されるアクションの収集)は、第2フェーズで構成されます。あなたがタスクの体にループを入れたら、最後の反復が勝つでしょう。最も簡単な方法は、(手動でコピーする)以下にあなたのタスクを変更することです:

task deployApks { 
    doLast { 
    android.applicationVariants.all { variant -> 
     if (variant.buildType.name == 'release') { 
     variant.outputs.all { 
     def flavor = variant.productFlavors.name.get(0) 

     def dirApk = System.getProperty("user.dir") + '/app/build/' + flavor + '/release/' 
     def dirMapping = System.getProperty("user.dir") + '/app/build/outputs/mapping/' + flavor + '/release/' 

     //copy apk and mapping.txt 
     copy { 
      from dirApk, dirMapping 
      include '*-release.apk', 'mapping.txt' 
      into dirDeploy 
      rename 'mapping.txt', 'mapping-' + flavor + '.txt' 
     } 
     } 
     } 
    } 
    } 
} 

これで問題が解決した場合は - (あなたがキャッシュをタスクに必要はありません)あなたがで作業することができます。それ以外の場合は、Copyタスクを適切に設定するか、カスタムタスクを作成する必要があります。

+0

素晴らしい!私はコピー作業に間違っていました。私はそれを単純化するために2つのコピー{}を再編成しました。あなたの回答を編集できますか? – rcperso

+0

@rcperso、もちろんそうです。どのようにgradleが動作するかについて、何らかの遊び場で試してみてください。 – Opal

関連する問題