Androidのoss-licenses-pluginは便利なのですが、一部のライブラリがライセンス一覧に表示されない場合があります。そこで、手動でライセンスを追加する方法を調べたところ、以下のページが見つかりました。
このコードを参考にしつつ、さらに複数のライセンスが登録しやすいようにメソッド化を行いました。
ソースコード
app/build.gradle
// 自動登録されないOSSライセンスを追加するタスク
task addOssLicenseTask {
// generateLicensesタスクの直後に起動
mustRunAfter tasks.findByName('generateLicenses')
doLast {
addOssLicense(project, "PermissionsDispatcher", "https://raw.githubusercontent.com/permissions-dispatcher/PermissionsDispatcher/master/LICENSE")
addOssLicense(project, "PhotoView", "https://raw.githubusercontent.com/chrisbanes/PhotoView/master/LICENSE")
}
}
// OSSライセンスを追加する
def addOssLicense(project, libName, licenseContent) {
final String UTF_8 = "UTF-8"
final byte[] LINE_SEPARATOR = System.getProperty("line.separator").getBytes(UTF_8)
def dependencyOutput = new File(project.buildDir, "generated/third_party_licenses")
def resourceOutput = new File(dependencyOutput, "/res")
def outputDir = new File(resourceOutput, "/raw")
// ライセンスファイル
def licensesFile = new File(outputDir, "third_party_licenses")
// ライセンスファイルへの書き込み前に現在の位置を保持
def start = licensesFile.length()
// ライセンスファイルへ書き込み
licensesFile << licenseContent
licensesFile << (LINE_SEPARATOR)
// ライセンスメタデータファイルに書き込み
def licensesMetadataFile = new File(outputDir, "third_party_license_metadata")
licensesMetadataFile << ("${start}:${licenseContent.length()} ${libName}")
licensesMetadataFile << (LINE_SEPARATOR)
}
// preBuild前にライセンス情報を追加する
tasks.findByPath(':app:preBuild').dependsOn addOssLicenseTask