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

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

Android

アプリ情報が格納されているクラスを利用して、デバッグかどうか(リリースかどうか)を判別する。


クラス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 {
	// リリース時
}



参考
https://developer.android.com/reference/android/content/pm/PackageManager.html
http://mousouprogrammer.blogspot.jp/2012/12/androidapplication.html
http://d.hatena.ne.jp/yu4u/20140629/1404057778
http://hascha.blogspot.jp/2012/04/google-play.html