web-dev-qa-db-ja.com

リリースモードかデバッグモードかをどのようにして検出しますか?

自分のコードで、自分がリリースモードまたはデバッグモードになっていることをどのようにして検出できますか?

311
David

最も簡単で長期的な解決策は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フラグをその開発者およびそのビルドタイプにとって意味のある値に設定することを選択できます。

651
CommonsWare

以下を試してください。

boolean isDebuggable =  ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );

コトリン:

val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE

ここからバンデルポストから取られます

54

はい、使用しても問題ありません。

if (BuildConfig.DEBUG) {
   //It's not a release version.
}

間違ったBuildConfigクラスをインポートしていない限り。依存関係ライブラリからではなく、プロジェクトのBuildConfigクラスを参照していることを確認してください。

enter image description here

48
Vansuita Jr.

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を必要なものに変更します。私はこのアプローチが好きです。というのも、構成内のフラグを確認でき、フラグを制御できるからです。

29

あるいは、BuildConfig.BUILD_TYPE;を使用して区別することもできます。

デバッグビルドを実行している場合、BuildConfig.BUILD_TYPE.equals("debug");はtrueを返します。そしてリリースビルドではBuildConfig.BUILD_TYPE.equals("release");はtrueを返します。

11
Prudhvi

私のアプリがデバッグ版で実行されていることを確認するためにこのソリューションを使用しています。

if (BuildConfig.BUILD_TYPE.equals("Debug")){
   //Do something
}
4

正しいBuildConfigクラスをインポートしていることを確認してください。そして、もちろん、以下を使用しても問題は発生しません。

if (BuildConfig.DEBUG) {
   //It's not a release version.
}
0
Salim Lachdhaf