2016-12-11 12 views
2

Gradleフレーバに3つの設定を追加しました。そして私はそれらにいくつかのジップ依存性を追加します。 preBuildの後にこのzipファイルを解凍します。 問題は、私のunzipタスクが常にgradleファイルを実行していたり​​、依存関係が変更されていないことです。この解凍作業には時間がかかり、ndkアプリケーションを開発しています。私が解凍タスクで静的ライブラリを変更するたびに、gradleはライブラリが変更されたと考えて、再度ビルドします。Gradleは常にタスクを実行します

gradleファイルが変更されていない場合、unzipタスクの実行をブロックしたいと思います。これは少しのキャッシュメカニズムのようです。ここに私のgradleの仕事です。

dependencies { 
    compile "com.google.android.gms:play-services:9.4.0" 
    compile 'com.android.support:multidex:1.0.0' 
    compile 'com.android.support:appcompat-v7:24.+' 
    compile 'com.android.support:design:24.+' 
    compile fileTree(dir: 'src/main/libs', include: ['*.jar']) 
    alphaCompile 'my alpha release static library from private maven repository in zip type' 
    betaCompile 'my beta release static library from private maven repository in zip type' 
    prodCompile 'my prod release static library from private maven repository in zip type' 
} 


task unzip(group: "Static Libraries", description: "Unzip all static libraries") { 
    doFirst{ 
     // get zip files from configurations 
     // unzip and move static libraries to destination folder 
     } 
    } 
} 
preBuild.finalizedBy (unzip) 
+0

あなたの質問から最も重要な部分、つまり 'doFirst'メソッドの本体を除外しています。タスクに入力/出力を宣言していないので、Gradleは最新のチェックについて知ることができません。 – mkobit

+0

さて、私はgradleのライフサイクルを学ぶ必要があることを理解しています。私はgradleのドキュメントを見ましたが、それは複雑に見えます。doFisrt()で自分のカスタムタスクにI/Oを定義するにはどうすればいいですか? –

+0

あなたはタスク定義のために '{}'ブロックにあなたのタスク_configuration_を定義したいと思っています。この部分は_configuration_フェーズで実行されます。設定を定義すると、問題が発生します([ユーザガイドのこのページ](https://docs.gradle.org/current/userguide/potential_traps.html#mkdirTrap)を参照))。私はちょっと質問に答えようとします。 – mkobit

答えて

1

あなたdoFirstブロック内のコードを除外しているので、それはあなたに正確な答えを出すのは難しいですが、あなただけのコンフィギュレーションファイルを取得し、その後、どこか別の場所にそれらを解凍している場合は、Copyタスクを活用することができように見えます:

tasks.create('unzip', Copy) { 
    dependsOn configurations.alphaCompile 
    from { 
    project.configurations.alphaCompile.collect { zipTree(it) } 
    } 
    into project.file("${project.buildDir}/unzipDir/") 
} 

カスタムタスクを定義する必要があります場合は、Gradleのは、実行前からチェックすることができるようにTask.getInputs()Task.getOutputs()を使用してconfigurationフェーズでの入力と出力を登録する必要があります。

+0

私は逃したものを理解しています。しかし今ではgradleが例外をスローします:プロジェクトのunzip()メソッドを見つけることができませんでした[unzip、クラスorg.gradle.api.tasks.Copy、build_4mrnler6ctu70k48fsy3b1k5d $ _run_closure5 @ 1d372b43] –

+0

'unzip'の周りに引用符がありますか?私はあなたの例でスピードを上げるよりも、タスクコンテナを使ってここにタスクを作成しています。 – mkobit

+0

私の遅い答えに申し訳ありません。あなたの答えは正しかったので、それほど助けになりました。ありがとうございました! :) –

関連する問題