はじめに
OSS Licenses Gradle Pluginは、ビルド時にOSSリストを作成ます。そのリストをもとにOssLicensesMenuActivityでライセンス表示できます。
これまではcookpadさんのLicenseToolsPluginを使わせてもらっていたのですが、deprecatedということで代わりにお勧めされたGoogleのOSS Licenses Gradle Pluginを使おうとしました。ところが使ってみるとSTLやらICU4CなどのOSSがリストアップされて、どういうこと?となったのでソースコードを調べて確認しました。
仕組み
ビルドを開始すると、OSS Licenses Gradle Pluginは初めにGradleでdependenciesのリストを作成します。以下のコマンドで出力されるやつと同じです。
gradlew -q :app:dependencies --configuration releaseCompileClasspath
作成されたファイルはapp/build/generated/third_party_licenses/[Build variant]/dependencies.json に出力されます。
POMファイルやAARファイルからライブラリのライセンスを取得します。例えばplay-services-tasksの場合はここにファイルがあります。
POMファイルにライセンスの種類とライセンスファイルへのリンクがあるので、まずそれをOSSリストに追加します。
dependencies.jsonに書かれているgroup名がcom.google.android.gmsかcom.google.firebaseで始まる場合、aarファイルの中に含まれるthird_party_license.json/third_party_license.txtに使用しているサードパーティのライセンスが書かれているので、それをリストアップします。
そんな感じでリストアップされたファイルがapp/build/generated/third_party_licenses/[Build variant]/res/raw のファイルです。
小ネタ
play-services-tasksのthird_party_licenseにはSGI STLが含まれていて、これがGPLなのでちょっと気になったのですが、
SGI STL
The STL portion of GNU libstdc++ that is used with gcc3 and gcc4 is licensed
under the GPL, with the following exception:
# As a special exception, you may use this file as part of a free software
# library without restriction. Specifically, if other files instantiate
# templates or use macros or inline functions from this file, or you compile
# this file and link it with other files to produce an executable, this
# file does not by itself cause the resulting executable to be covered by
# the GNU General Public License. This exception does not however
# invalidate any other reasons why the executable file might be covered by
# the GNU General Public License.
と書かれており、コンパイルして使う分には無制限に利用できるようです。