2017-10-29 5 views
2

私はAndroidプロジェクトのタスクの順序に問題があります。Androidプロジェクトでのタスクのオーダー

これは私のapp/build.gradleファイルの一部です:

task release 

task archiveRelease(type: Copy) { 
    println 'copy apk and mapping files' 
    from './build/outputs/' 
    into "../releases/${rootProject.ext.configuration.version_code}_${rootProject.ext.configuration.version_name}" 
    include('apk/release/app-release.apk', 'mapping/release/mapping.txt') 
    rename('app-release.apk', "${rootProject.ext.configuration.package}_${rootProject.ext.configuration.version_code}_${rootProject.ext.configuration.version_name}.apk") 
    rename('mapping.txt', "mapping_${rootProject.ext.configuration.version_code}_${rootProject.ext.configuration.version_name}.txt") 
} 

project.afterEvaluate { 

    dependencyUpdates.dependsOn clean 
    assembleRelease.dependsOn clean 

    archiveRelease.mustRunAfter("assembleRelease") 
    release.dependsOn assembleRelease 
} 

しかし、私はreleaseタスクを起動したときには、assembleReleaseの終わりに先頭にcopy apk and mapping filesを印刷しません。

$ ./gradlew release 
Parallel execution with configuration on demand is an incubating feature. 

> Configure project :app 
copy apk and mapping files 

がどのようにビルド後に実行archiveReleaseを得るために行われます。これは、コンソール出力のですか?

答えて

1

あなたが解放タスクを呼び出すときに、ビルドをトリガしたい場合は、以下:

  • ./gradlew release:構築=> archiveRelease =>リリース
  • ./gradlew build:構築=> archiveRelease =>
リリース

階調:

task(release) { 
    doLast { 
     println 'release task' 
    } 
} 
task(archiveRelease) { 
    doLast { 
     println 'archiveRelease task' 
    } 
} 

build.finalizedBy release 
archiveRelease.dependsOn build 
release.dependsOn archiveRelease 

なのでその場合は./gradlew build & ./gradlew releaseとなります。

しかし、あなたは

  • ./gradlew buildを実行することになり、スタンドアロンreleaseタスク持つようにしたい場合:構築=> archiveRelease =>リリースを
  • ./gradlew release:archiveRelease =>リリース

のGradle:

task(release) { 
    doLast { 
     println 'release task' 
    } 
} 
task(archiveRelease) { 
    doLast { 
     println 'archiveRelease task' 
    } 
} 

build.finalizedBy release 
release.dependsOn archiveRelease 
関連する問題