GradleカスタムTask Jarパッケージ


以前のADTはeclipseだったので、jarを外部に提供するときは、直接Exportして、srcディレクトリ出力を選択すればいいです.しかし、ASに切ると、ずっとうるさいです.そこで、夜の退屈を利用してGradleのJarバッグの出力を検討してみました.
Jarパッケージの内容として使える場所は2つあります.

1:build/intermediates/bundles/release/下のclasses.jar


2:build/intermediates/classes/release/下のプロジェクトディレクトリ


方式1、採用する方式はcopyで、つまりネット上で最も多くて、最も検索しやすくて、最も繰り返しの方式です:
task makeJar(type: Copy) { 
    delete 'build/libs/App'sName.jar' 
    from( 'build/intermediates/bundles/release ')  
    into( 'build/libs')  
    include('classes.jar')  
    rename('classes.jar', 'App'sName.jar')  
}
makeJar.dependsOn(build)  

Jarパッケージを生成する必要がある場合は、コマンドラインTerminalでgradlew makeJarを入力すると、「build/libs」ディレクトリの下で名前付きjarパッケージが生成されます.しかし、入力するファイルやフォルダをカスタマイズできないという欠点がありますので、私たちとしては爽やかではありません.(Ps:不要なファイルを手動で取り除くことができても、自動でなければlow~)taskの後ろにあるmakeJarはメソッド名で、勝手に名前をつけることができ、その時にコマンドを実行するときにこのメソッドを実行すればいいと簡単に説明します.他のdeleteyが何を削除するかについては、fromはどこから読んで、intoはどこへ行って、includeは何を含んで、renameはどんな名前を変えて、excludeは何を除去して、dependsOnは何に依存します.のなどの字面の意味はそれが表現する意味です.
方法2:これは個人的に好きなものです.jarパッケージに入力したいファイルとフォルダをもっと自由に選択できるからです.
task makeJar(type: Jar) {
    delete 'build/libs/App'sName.jar'
    baseName 'App'sName'
    from('build/intermediates/classes/release')
    exclude('android/',  'BuildConfig.class', 'R.class')
    exclude {
        it.name.startsWith('R$');
    }
}
makeJar.dependsOn(build)

この方法は私の需要をよく満たして、少し不足しているのはApp工事のsrcの下に'resources/xxxを書く工事があることです.properties'ファイルが構成に入ると、生成されたjarパッケージにはその構成ファイルがなくなり、手動でファイルをコピーするという不器用な方法があります.Soは私たちとして、このように依然としてlowを感じています.だから私たちは別の方法を考えなければなりません私たちは振り返って方式1がcopyで、方式2がjarの方式なので、私たちは融合して、私たちの問題を解決することができます.Ps:resourcesによって生成されたファイルのパスは、次のとおりです.

build/intermediates/sourceFolderJavaResources/release


2つのtaskを書く必要があります
task copyProperties(type: Copy) {
    delete 'build/intermediates/classes/release/xxx.properties'
    from('build/intermediates/sourceFolderJavaResources/release')
    into('build/intermediates/classes/release/')

}
task makeJar(type: Jar) {
    delete 'build/libs/App'sName.jar'
    baseName 'App'sName'
    from('build/intermediates/classes/release')
    exclude('android/',  'BuildConfig.class', 'R.class')
    exclude {
        it.name.startsWith('R$');
    }
}
copyProperties.dependsOn(build)
makeJar.dependsOn(copyProperties)

実行が必要な場合は、コマンドラインTerminalにgradlew makeJarを入力すると、「build/libs」フォルダの下に私たちの欲しいjarパッケージが表示されます.実行順序は、copyPropertiesがbuildを実行した後、makeJarがcopyPropertiesを実行した後です.
以上は午后少し见て、もっと多くのも他の人のいくつかの経験を参考にして、书いた少しの心得などです.不足や類似があれば、指摘を惜しまないでください.ありがとうございます.