LoginSignup
89
76

More than 3 years have passed since last update.

[Android] debug ビルド時のソースを分ける & debug ビルドあれこれ

Last updated at Posted at 2015-12-28

resources 類の場合

通常は src/main にファイルが置かれていると思いますが、debug ビルド用のファイルは src/debug ディレクトリを作成して配置します。

スクリーンショット_2015-12-28_16_03_03.png

maindebug で同じ定義(上図でいうとapp_name)がある場合、debug ビルド時は main のソース < debug のソース の優先度で適用してくれます(定義が上書きされる)。debug のファイルでは、main の全ての定義を上書きする必要はありません(debug で上書きしたい定義とういうか、その行だけ書けばいい)。

layoutdrawable の場合はファイル単位で debug ビルド用のものを用意します。

debug でなく release ビルド時のソースを分ける場合も同様な考えで。

Java のソースの場合

Java のソースの場合は、main のソースは debug とも release とも共存できません。もし debug ビルド時のみのソースを用意するなら、Java 的なエラーにならないよう release の方にもソースを用意(空の public メソッド等を実装)する必要があります。

ほか debug ビルドあれこれ

debug ビルドのみライブラリを読み込む

build.gradle
dependencies {
    // ...

    debugCompile 'com.facebook.stetho:stetho:1.2.0'

    // ...
}

同様に releaseCompile では release ビルド時のみ読み込まれます。

debug ビルド時のアプリケーションIDを変える

アプリケーションIDが debug/release で一緒だと、同じ端末上でアプリが共存できませんし、Fabric(Crashlytics) でアプリを debug/release で別に管理しづらかったりします。

そういう場合は、次のようにすると debug ビルド時のアプリケーションIDの末尾に .debug が付与されるので、release ビルドと別にすることが出来ます。

build.gradle
android {
    // ...

    buildTypes {
        debug {
            applicationIdSuffix = ".debug"
        }
        release {
            // ...
        }
    }

// ...
}

コード上で debug ビルドか否かを判定

上記で説明してきたように、ソースやビルドで分けるほどでもないよっていう時は、普通にコードで if 文で分岐すればよいと思います。最近?の Android Studio ベースのプロジェクトでは、ビルド時に BuildConfig クラスが自動で生成されるはずなので、

スクリーンショット 2015-12-28 15.15.02.png

例えば debug ビルド時のみに処理したい場合は次のように書けます。

if (BuildConfig.DEBUG) {
    // ...
}

おわりに

ちなみに debug / release ビルドは Android Studio の Build Variants タブで切り替えることが出来ます。

スクリーンショット 2015-12-28 16.26.49.png

また上記のこと全般について、Product Flavor も同じような感じでいけると思います。

89
76
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
76