自分のコードで、自分がリリースモードまたはデバッグモードになっていることをどのようにして検出できますか?
最も簡単で長期的な解決策はBuildConfig.DEBUG
を使うことです。これはデバッグビルドの場合はboolean
、それ以外の場合はtrue
となるfalse
値です。
if (BuildConfig.DEBUG) {
// do something for a debug build
}
私は個人的には問題に遭遇していませんが、この値はEclipseベースのビルドから100%信頼できるものではないとの報告があります。
Android Studioを使用している場合、またはコマンドラインからGradleを使用している場合は、独自のものをBuildConfig
に追加するか、そうでなければdebug
およびrelease
ビルドタイプを微調整して実行時にこれらの状況を区別できます。
Illegal Argumentによる解決策は、マニフェストのAndroid:debuggable
フラグの値に基づいています。それがあなたがどのようにあなたが "リリース"ビルドから "デバッグ"ビルドを区別したいか、そして定義上、それが最善の解決策です。しかし、今後は、debuggable
フラグは、Gradle/Android Studioが「デバッグ」ビルドと見なすものとは独立した概念であることに注意してください。どのビルドタイプでも、debuggable
フラグをその開発者およびそのビルドタイプにとって意味のある値に設定することを選択できます。
以下を試してください。
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
コトリン:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
ここからバンデルポストから取られます
BuildConfig.DEBUG
に関するコメントが混在しているため、デバッグモードでcrashlytics(およびanalytics)を無効にするために次のものを使用しました。
/app/build.gradleを更新
Android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "your.awesome.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 100
versionName "1.0.0"
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'true'
}
buildTypes {
debug {
debuggable true
minifyEnabled false
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'false'
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
次に、コード内でENABLE_CRASHLYTICS
フラグを次のように検出します。
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
アプリで同じ概念を使用し、ENABLE_CRASHLYTICS
を必要なものに変更します。私はこのアプローチが好きです。というのも、構成内のフラグを確認でき、フラグを制御できるからです。
あるいは、BuildConfig.BUILD_TYPE;を使用して区別することもできます。
デバッグビルドを実行している場合、BuildConfig.BUILD_TYPE.equals("debug");
はtrueを返します。そしてリリースビルドではBuildConfig.BUILD_TYPE.equals("release");
はtrueを返します。
私のアプリがデバッグ版で実行されていることを確認するためにこのソリューションを使用しています。
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
正しいBuildConfigクラスをインポートしていることを確認してください。そして、もちろん、以下を使用しても問題は発生しません。
if (BuildConfig.DEBUG) {
//It's not a release version.
}