【Android】OSS Licenses Gradle Pluginを使用してライセンスを取得してみた

こんにちは、kazuです。
まずこの記事を見ているということはAndroid開発をやっていてOSSを管理したいということですね。
開発をしていたらOSSは避けて通れないと思います。そしてOSSを使用するということはライセンスがありその管理は必須です。
ということでここからが本題で今回はgoogleが提供しているoss-licenses-pluginを使用方法を記事にしました。
OSS関連のライブラリは色々あるので、一つとして参考にしていただければと思います。

はじめに

今回紹介するOSS Licenses Gradle Pluginというのはそのプロジェクトで使用しているアプリのOSS情報を取得してくれるものです。
そして手作業でOSSを探すと管理がめちゃくちゃ大変です。なのでそれを自動で取得してくれるgoogleのプラグインです。
そしてあまり記事にはありませんでしたが、ちょっとした注意点などもありますのでそれも含めて解説していきます。

OSS Licenses Gradle Pluginのできないこと

できることはおそらく大体わかっているので、まずはOSS Licenses Gradle Pluginのできないことを少し話しておきましょう。
私の経験上、OSS一覧を作成しているフォーマットとしてエクセルを使用しているところが結構あります。
CSV出力などリストを出力してくれたらいいなと思っている方もいるかもしれませんが、実はありません。
出力されるのは以下のファイルのみです
・third_party_licenses(ライセンスが書き込まれたファイル)
・third_party_licenses_metadata(ライセンス名が書き込まれたファイル)
・dependencies.json(バージョンなどが書き込まれたファイル)
そして収集した情報をもとに上記のファイルを作成、アプリに反映すると言う形のようです。
次にできないことはありませんが、レイアウトが決めれていて修正がめんどくさいです。
いい意味で言えばすでにレイアウトがあるので楽ができますが、悪い意味で言うとカスタマイズ性があまり良くないです。
最後ですが、これは他の記事、公式サイトではわかりずらいですが、build Variantをreleaseにして(releaseビルドをできるようにbuild.gradleを修正してください。)対応をしないとファイルは作成されますが、以下の文言が出力されていて、ライセンスを表示されません。
「Licenses are only provided in build variants (e.g. release) where the Android Gradle Plugin generates an app dependency list.」
つまりreleaseビルドしかライセンスが表示されない仕様のようです。

実際にコードを見てみよう

plugins {
    // プラグインを設定する
    id 'com.google.android.gms.oss-licenses-plugin'
}

android {
    ・・・
}

dependencies {
    ・・・
    // play-services-oss-licenses:17.0.1を設定する
    implementation 'com.google.android.gms:play-services-oss-licenses:17.0.1'
}
buildscript {
    repositories {
        google()
    }
    dependencies {
        // パスを設定する
        classpath 'com.google.android.gms:oss-licenses-plugin:0.10.6'
    }
}
plugins {
    ・・・
} 

ここまでがgradleの設定です。これでSyncしてください。ここからは画面遷移する対応になります。

<application>
        // Activityを宣言する
        <activity
            android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"/>
        <activity
            android:name="com.google.android.gms.oss.licenses.OssLicensesActivity"/>
</application>
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
// Activityをインポートする
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val button: Button = findViewById(R.id.oss_button)
        button.setOnClickListener{
            // ライセンス表示Activityに遷移する
            startActivity(Intent(this, OssLicensesMenuActivity::class.java))
        }
    }
}

基本的には公式サイトと同じ実装になります。ちょっと補足します。
まず以下のファイルが作成されるタイミングはビルドされた時になります。
作成場所として、 project_app/app/build/generatedthird_party_licensesというディレクトリが作成されさらにその中にrelaseディレクトリががありその中に以下のファイルが作成されています。そして気をつけて欲しいのがreleaseビルドをした時だけreleaseディレクトリが作成されてdebugビルドをした時にはdebugディレクトリが作成されています。debugビルドでライセンスが表示されないのはdebugディレクトリが作成されてしまうからです。
・third_party_licenses(ライセンスが書き込まれたファイル)
・third_party_licenses_metadata(ライセンス名が書き込まれたファイル)
・dependencies.json(バージョンなどが書き込まれたファイル)

releaseビルドを実行しようとするとEdit Configurationが表示される

私も起こったのですが、もしBuild Variantからreleaseに変更してRunアイコンを押した時にEdit Configurationが表示された時の対応です。
本来であればreleaseビルドを行うためにの設定(パスワードなど)が必要なのですが、それを行なっていないために起きている不具合と思って問題ないです。
PlayStoreにリリースするアプリであればパスワードなどを設定してreleaseビルドをできるようにしたほうがいいですが、プラグインをサンプル的に使用したいと言うのであれば(本来であればお勧めしません。)以下をbuild.gradleに追加してください。そして再度releaseビルドを実行するとおそらく入るはず。

android {
・・・
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }
    signingConfigs {
        debug {
            // 以下を追加(セキュリティ的によろしくないので動作確認のためだけ使用してくださいね)
            storeFile file(System.getProperty("user.home") + "/.android/debug.keystore")
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
    }
}

最後に

いかがでしたでしょうか?
OSS Licenses Gradle Pluginについて実装方法などをお伝えしていきました。
OSS Licenses Gradle Pluginでなくてもアプリ開発をしている方にとってはOSS取得は必要なことになります。
プラグインを導入することにより少なくとも管理がしやすくなり、さらに使用してはいけないライセンスを知ることができます。
メリットはある実装なので、お試しでも触ってみるといいと思います。
この記事が参考になることを願います。最後までご覧いただきありがとうございました。