cutmail's blog

write the code

Androidアプリで使っているライブラリのライセンスをいい感じに表示する

Fablic Advent Calendar 2015 - Qiitaの12/1のエントリーです。

序章 

みなさんはAndroidアプリにOSSライブラリなどを導入した際には、 そのライブラリのライセンスなどは正しく表示していますか?

弊社でもいくつかのOSSライブラリを導入しており、設定画面の中にライセンス情報を表示するようにしています。

AboutLibrariesとは

github.com

AboutLibraries」はアプリに導入しているライブラリのライセンス一覧を簡単に作成でき、カスタマイズなどもできるライブラリです。 サポートされているライブラリであれば、プロジェクト内を検索して自動で一覧表示をしてくれます。

f:id:invent:20151201000916p:plain:w300 f:id:invent:20151201000928p:plain:w300

使い方

AboutLibrariesを使ってライセンス一覧画面を表示する方法はいくつかあり、 その一つがFragmentを取得するやり方です。

Fragmentを生成する方法

LibsFragment fragment = new LibsBuilder()
        .fragment();

Activityを継承する方法

二つ目が、提供されているベースのActivityを継承するやり方です。

public class ExtendActivity extends LibsActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        setIntent(new LibsBuilder().withLibraries("activeandroid", "caldroid").withActivityTheme(R.style.MaterialDrawerTheme).intent(this));
        super.onCreate(savedInstanceState);
    }
}

Activityを直接起動する方法

こちらはActivityのタイトルなどを設定したうえで、直接起動する方法です。 一番手軽かもしれません。

new LibsBuilder()
        .withLibraries("otto", "progress_menu_item", "snack_bar")
        .withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
        .start(this);

またどの方法でも、表示する情報などを細かく設定したり、テーマをできるようになっています。

カスタマイズの一例

.withAboutIconShown(true)
.withAboutVersionShown(true)
.withAboutDescription("description")
..withActivityTheme(R.style.MyTheme)
.withActivityTitle(getString(R.string.license))

詳しくはサンプルアプリが公開されているので、そちらをご覧ください。

任意のライブラリライセンスの追加

サポートされているライブラリ以外を使用している場合は、自動で追加はしてくれないため、下記のような設定ファイルをresディレクトリいかに配置する必要があります。

今回は ProgressMenuItemを追加してみます。 下記のようなファイル名で設定を作成します。 ただこの設定ファイルを直接作るのは大変なので、ジェネレーターが公開されています。

AboutLibraries definition builder

こちらの画面に従って入力していくだけで、設定ファイルを作ってくれます。

res/values/library_progress_menu_item_strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <string name="define_int_progress_menu_item"></string>
    <!-- Author section -->
    <string name="library_progress_menu_item_author">hotchemi</string>
    <string name="library_progress_menu_item_authorWebsite">https://github.com/hotchemi</string>
    <!-- Library section -->
    <string name="library_progress_menu_item_libraryName">ProgressMenuItem</string>
    <string name="library_progress_menu_item_libraryDescription">Shows and stop a progress in the ActionBar.</string>
    <string name="library_progress_menu_item_libraryWebsite">http://hotchemi.github.io/ProgressMenuItem</string>
    <string name="library_progress_menu_item_libraryVersion">0.3.3</string>
    <!-- OpenSource section -->
    <string name="library_progress_menu_item_isOpenSource">true</string>
    <string name="library_progress_menu_item_repositoryLink">https://github.com/hotchemi/ProgressMenuItem</string>
    <!-- ClassPath for autoDetect section -->
    <string name="library_progress_menu_item_classPath"></string>
    <!-- License section -->
    <string name="library_progress_menu_item_licenseId">apache_2_0</string>
    <!-- Custom variables section -->
</resources>

設定を追加したライブラリを表示するようにするには、

.withLibraries("otto", "progress_menu_item", "snack_bar")

のように設定ファイルで指定した名前を引数に渡してあげます。 これでいい感じでライセンス情報を表示することができます。

f:id:invent:20151201005818p:plain:w300

最後に

明日はshobyがiOSアプリの開発について書く予定です。 よろしくお願いします。