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

Android Studioでアプリ開発!

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

Android Studioで、一つのプロジェクトから複数のアプリを作成する方法

プログラムを変更せずに複数のアプリを作りたい

アプリを作っていると、無料版と有料版をリリースしたいことがあります。あるいはコンテンツとなるリソースだけを入れ替えて複数のアプリを作りたいことがあります。
こうした場合、それぞれにプロジェクトを作成すると、管理が煩雑になります。また、プログラムに変更が生じた場合、それぞれのプロジェクトを開いて同じ作業を繰り返すことになり、時間と手間がかかると同時に作業ミスを起こしやすくなります。
それならば共通クラスを作るなり自作でフレームワークを作るなりすればいいじゃないか、という話なんですが、そうするよりももっと簡単に一つのプロジェクトから複数のアプリを作成する方法があるので紹介したいと思います。

完成イメージ

[Switching] というアプリの無料版(free)と有料版(charge)を作成したいと思います。
無料版を実行した時
f:id:jolene:20140723131926p:plain
有料版を実行した時
f:id:jolene:20140723131933p:plain
メニュー画面
f:id:jolene:20140723131939p:plain

build.gradle に無料版と有料版の設定を追加する

プロジェクトの appフォルダ内にある build.gradle に productFlavors を追加します。packageName をそれぞれ指定することにより、別アプリ(パッケージ)としてアプリを作ることができます。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.example.switching"
        minSdkVersion 19
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    // 無料版と有料版の設定
    productFlavors {
        // 無料版
        free {
            packageName = 'com.example.switching.free'
        }
        // 有料版
        charge {
            packageName = 'com.example.switching.charge'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

無料版、有料版それぞれのビルド方法

メニューの [表示] - [ツールウィンドウ] - [Build Variants] でビルド選択画面を開きます。
f:id:jolene:20140723123533p:plain

ここから無料版、有料版それぞれのビルド方法を選択することができます。
f:id:jolene:20140723123540p:plain

無料版と有料版のリソースを追加する

このままですと無料版も有料版も違いがありませんので、それぞれにリソースを追加して違う見た目と動きにしてみたいと思います。
プロジェクトの main フォルダと同列に free と charge フォルダを作り、その中に main の res フォルダをコピーします。
こうすることで、ビルド時に free と charge それぞれのリソースを読み込んでくれるようになります。
f:id:jolene:20140723124549p:plain

試しに free/res/values/strings.xml を変更してみます。
f:id:jolene:20140723125437p:plain

アプリ名とTextViewの文字列を変更してみました。

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

    <string name="app_name">Switching free</string>
    <string name="hello_world">これは無料版です。</string>
    <string name="action_settings">Settings</string>

</resources>

[Build Variants] を freeDebug にして実行した結果がこちらです。
f:id:jolene:20140723125621p:plain

さらに、charge/res/values/strings.xml の変更と、free、charge それぞれのアイコンを設定したものが冒頭に紹介した完成イメージになります。(アイコンを追加する方法は、Android Studioでアプリのアイコンを設定する方法 - Android Studioでアプリ開発!を参照してください)

まとめ

一つのプロジェクトから複数のアプリを作成してみました。build.gradle に作成したいアプリごとの設定を追加し、packageName を指定することで同一プログラムで別のアプリを作ることができました。それぞれにリソースを追加・設定することで見た目やコンテンツを変えることができました。
無料・有料アプリやリソースを入れ替えて別アプリを作りたい場合、最も運用コストを抑えられる方法だと思います。

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

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

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

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