Answers:
最简单,最好的长期解决方案是使用BuildConfig.DEBUG
。这是一个boolean
,这将是价值true
的调试版本,false
否则:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
有报道说,虽然我个人没有遇到问题,但是这个值在基于Eclipse的构建中并不是100%可靠的,因此我无法说出它到底有多少问题。
如果您使用的是Android Studio,或者从命令行使用Gradle,则可以将自己的内容添加到BuildConfig
或以其他方式调整debug
和release
构建类型,以帮助在运行时区分这些情况。
非法参数的解决方案基于android:debuggable
清单中标志的值。如果那是您希望将“调试”构建与“发布”构建区分开的方式,那么按照定义,那是最好的解决方案。但是,请记住,该debuggable
标志实际上是Gradle / Android Studio认为是“调试”版本的独立概念。任何构建类型都可以选择将debuggable
标志设置为对该开发人员和该构建类型有意义的任何值。
public static final boolean DEBUG = Boolean.parseBoolean("true");
了调试版本。虽然这是一种奇怪的设置DEBUG
方法true
,但它应该可以工作。如果您在1.3.0测试版本之一中看到了这一点,或者如果您拥有1.2.2的可复制测试用例,请提出问题。我看不到任何未解决的问题报告此问题。
请尝试以下操作:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
科特林:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
从这里的 bundells邮筒取
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
为您想要的任何名称。我喜欢这种方法,因为我可以在配置中看到该标记并且可以控制该标记。
我正在使用此解决方案,以防发现我的应用程序正在调试版本上运行。
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
一个依赖的gradle模块,该模块(当然)与应用程序的build.gradle文件没有关系-这导致调试模式被错误地识别。if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
解决了该问题。谢谢
确保您导入的是正确的BuildConfig类,是的,使用以下内容将没有问题:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
位于应用程序的软件包中,例如import com.mycompany.myapp.BuildConfig;