読者です 読者をやめる 読者になる 読者になる

Android Studioでアプリ開発!

Androidアプリ開発初心者の備忘録です。

一つのプロジェクトから複数のアプリを作る場合のリソースは最小限にできる

Android Studioはリソースをマージしてくれる

Android Studioで、一つのプロジェクトから複数のアプリを作成する方法 - Android Studioでアプリ開発!の補足です。
複数アプリを作成する場合、リソースを個別にしたい部分と共通して使いたい部分があると思います。Android Studioではビルド時にリソースをマージしてくれるので、必要最小限のリソースを準備するだけで済みます。
Android Studioで、一つのプロジェクトから複数のアプリを作成する方法 - Android Studioでアプリ開発!で使ったプロジェクトを元に具体的に説明します。
結論から言うと、共通して使いたい部分は main だけに準備すればよく、個別に使いたい部分は free、charge にだけ準備すればよいということになります。

実行時のイメージ

赤線が共通して使いたい部分、緑線が個別に使いたい部分だとします。
f:id:jolene:20140723142816p:plain
f:id:jolene:20140723142822p:plain

main の layout ファイル

main の layout ファイルは以下のように記述しています。
共通して使いたいTextViewは id が textView1 です。common_text を表示するように指定しています。
個別に使いたい部分は textView2 になります。kind_text を表示するように指定しています。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MyActivity">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/common_text"
            android:id="@+id/textView1" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/kind_text"
            android:id="@+id/textView2" />
    </LinearLayout>

</RelativeLayout>

main の strings.xml

main の strings.xml には以下のように記述しています。共通して使う common_text のみを記述しています。個別で使いたい kind_text は記述していません。

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

    <string name="common_text">ここは全アプリに共通して表示するテキストです。</string>
    <string name="action_settings">Settings</string>

</resources>

free の strings.xml

free の strings.xml には以下のように記述しています。共通して使う common_text は記述していません。個別で使いたい kind_text を記述しています。

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

    <string name="app_name">Switching free</string>
    <string name="kind_text">このアプリは無料版です。</string>

</resources>

charge の strings.xml

charge の strings.xml には以下のように記述しています。共通して使う common_text は記述していません。個別で使いたい kind_text を記述しています。

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

    <string name="app_name">Switching charge</string>
    <string name="kind_text">このアプリは有料版です。</string>

</resources>

まとめ

以上のように記述することで、ビルド時に Android Studio がリソースをマージして実行してくれます。もちろん、free や charge に common_text を記述しても問題はありません。しかし、同じ内容を別々のファイルに記述するのは冗長ですし、バグの温床になりかねません。共通して使う部分は main に固めて、個別で使う部分は free と charge それぞれのリソースだけに記述するのが望ましいと思います。

また、今回は strings.xml だけを取り上げましたが、レイアウトファイルやアイコンファイルなどのリソースも同様です。後々のメンテナンスを考えて、リソースの配置はできるだけ最小限にしましょう。

Android StudioではじめるAndroidプログラミング入門

Android StudioではじめるAndroidプログラミング入門

初歩からわかるAndroid最新プログラミング 増補改訂版

初歩からわかるAndroid最新プログラミング 増補改訂版