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

技術メモ

業務で調べたこととか...

Androidで開発時かリリース時か判別する

アプリ情報が格納されているクラスを利用して、開発時(デバッグ時)かリリース時かを判別する。
この判別により、開発時とリリース時で処理を振り分けることができる。
例えば、APIキーを開発用とリリース用で分けたり、デバッグログを残したり残さなかったり。

クラスApplicationInfoの中に、アプリの利用状況に応じて値が変動する、変数flagsというものがあるので、

  /**
     * Flags associated with the application.  Any combination of
     * {@link #FLAG_SYSTEM}, {@link #FLAG_DEBUGGABLE}, {@link #FLAG_HAS_CODE},
     * {@link #FLAG_PERSISTENT}, {@link #FLAG_FACTORY_TEST}, and
     * {@link #FLAG_ALLOW_TASK_REPARENTING}
     * {@link #FLAG_ALLOW_CLEAR_USER_DATA}, {@link #FLAG_UPDATED_SYSTEM_APP},
     * {@link #FLAG_TEST_ONLY}, {@link #FLAG_SUPPORTS_SMALL_SCREENS},
     * {@link #FLAG_SUPPORTS_NORMAL_SCREENS},
     * {@link #FLAG_SUPPORTS_LARGE_SCREENS}, {@link #FLAG_SUPPORTS_XLARGE_SCREENS},
     * {@link #FLAG_RESIZEABLE_FOR_SCREENS},
     * {@link #FLAG_SUPPORTS_SCREEN_DENSITIES}, {@link #FLAG_VM_SAFE_MODE},
     * {@link #FLAG_INSTALLED}, {@link #FLAG_IS_GAME}.
     */
    public int flags = 0;
    ・・・
    /**
     * Value for {@link #flags}: set to true if this application would like to
     * allow debugging of its
     * code, even when installed on a non-development system.  Comes
     * from {@link android.R.styleable#AndroidManifestApplication_debuggable
     * android:debuggable} of the <application> tag.
     */
    public static final int FLAG_DEBUGGABLE = 1<<1;


こんな感じで、開発用とリリース用で処理を振り分けることができる。

Context appCon = getApplicationContext();
PackageManager pm = appCon.getPackageManager();
ApplicationInfo info = pm.getApplicationInfo(appCon.getPackageName(), PackageManager.GET_META_DATA);

if ((info.flags & ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE) {
	// 開発時(デバッグモード)
}
else {
	// リリース時
}


参考
PackageManager | Android Developers
[Android]マニフェストファイルのapplicationの子要素に<meta-data>を含める。 | 妄想プログラマのらくがき帳
システムプリインアプリの判定 - yu4uの日記
Still Life: Google Playストアからインストールしたアプリか判別する方法