github.com
techlife.cookpad.com
つまづいたこと1
普通にREADMEのSetupを実行しただけではエラーになります。
https://github.com/cookpad/license-tools-plugin#for-gradle-plugin-3-users
ここに書かれてますが、Android Studio 3を使ってる場合は、そのための対応が必要になります。
exampleにサンプルが書かれていました。
https://github.com/cookpad/license-tools-plugin/blob/master/example/build.gradle#L54-L63
def implementation_project(arg) {
if (project.gradle.startParameter.taskNames.contains("checkLicenses")
|| project.gradle.startParameter.taskNames.contains("generateLicensePage")
|| project.gradle.startParameter.taskNames.contains("generateLicenseJson")
|| project.gradle.startParameter.taskNames.contains("check")) {
dependencies.implementation(dependencies.project(path: arg.path, configuration: 'default'))
} else {
dependencies.implementation(dependencies.project(path: arg.path))
}
}
こんな感じのコードを入れる必要があります。これを入れると解決!
つまづいたこと2
解決!と思いきや、複数moduleで開発していると、先程作ったメソッドを、
app/build.gradle
hoge/build.gradle
など、複数ファイルで同じ記述をしなくてはなりませんでした。共通化したい。。!ということで、ファイルを作り、そのファイルから呼び出すようにしてみます。
license_tools_plugin_helper.gradle
というファイルを作って以下のように書きました。
ext.implementation_project = { arg ->
if (project.gradle.startParameter.taskNames.contains("checkLicenses")
|| project.gradle.startParameter.taskNames.contains("generateLicensePage")
|| project.gradle.startParameter.taskNames.contains("generateLicenseJson")
|| project.gradle.startParameter.taskNames.contains("check")) {
dependencies.implementation(dependencies.project(path: arg.path, configuration: 'default'))
} else {
dependencies.implementation(dependencies.project(path: arg.path))
}
}
そして、これを各module配下で以下のように書いて読み込みます。([追記] 全moduleで必要な場合は、rootのbuild.gradleのallprojectsに書けば1回で済む事を教えて頂いた!)
apply from: "${rootDir.absolutePath}/license_tools_plugin_helper.gradle"
groovyちゃんとわかってなくて、普通にdefという記述のままファイルに書いたら各所でよしなに使えるのかと思ったら、そうでもなかった。。。org
めんどくさかったこと
./gradlew checkLicenses
これを実行した時に、出力される内容をapp/licenses.yml
に保存して、
自動的に取り切れてなかった部分を修正していくのですが、この作業が結構手間がかかった。。。
運用
- ciで
./gradlew checkLicenses
を定期的に実行(check
でも流れる)
- エラーが出たらその時の出力をymlファイルに追加。手直しする部分は手直しする
./gradlew generateLicensePage
でhtmlファイルを再出力してコミット
こんな感じで出来るから楽だなーという感じ。
所感
ライセンス、ライブラリ追加したら更新するの忘れがちなので管理が楽になりました。
play-services-oss-licensesを本当は使いたかったけど、使ってみたところ、使ってるライブラリが表示されなかったので断念しました。原因わからず。。。
DroidKaigiのアプリではちゃんと出力されいる様子だったので、こちらのアプリの作りか、環境が影響してそうな感じ。。。