回答:
最も簡単で長期的な解決策は、を使用すること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
フラグをその開発者とそのビルドタイプにとって意味のある値に設定することができます。
public static final boolean DEBUG = Boolean.parseBoolean("true");
、デバッグビルドを取得します。これはに設定する奇妙な方法ですDEBUG
がtrue
、機能するはずです。これが1.3.0テストリリースの1つで見られる場合、または1.2.2の再現可能なテストケースがある場合は、問題を報告してください。この問題を報告する未解決の問題はありません。
以下を試してください:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
コトリン:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
こちらからバンデルポストより抜粋
getApplicationInfo().flags
ますか?
はい、使用しても問題はありません。
if (BuildConfig.DEBUG) {
//It's not a release version.
}
間違ったBuildConfigクラスをインポートしない限り。依存関係ライブラリからではなく、プロジェクトのBuildConfigクラスを参照していることを確認してください。
に関するコメントが混在しているためBuildConfig.DEBUG
、デバッグモードでcrashlytics(および分析)を無効にするために以下を使用しました。
/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 を返します。
true
。
私のアプリがデバッグバージョンで実行されていることが判明した場合に備えて、このソリューションを使用しています。
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
(もちろん)アプリのbuild.gradleファイルへの参照がなかった依存型Gradleモジュールで使用していたため、デバッグモードが誤って認識されていました。if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
問題を修正しました。ありがとう
BuildConfig
たとえば、アプリのパッケージにありますimport com.mycompany.myapp.BuildConfig;