我想了解执行一个代码块的最佳方法是什么,它只在Debug目标上,在某个活动上是必需的,而不依赖于'if'语句。此外,如果在为另一个目标编译相同的应用程序时,可以从编译中排除代码块。
答案 0 :(得分:1)
老实说,最好和最简单的方法是执行以下操作,只能在可调试的应用程序中执行:
if(BuildConfig.DEBUG) {
// run your piece of code
}
如果您在发布时使用proguard,它将与您应用中的任何其他死代码一起被删除,因为它将评估为" false"发布版本。这是一种简单的方法。
不依赖于'如果'语句
在这种情况下,您需要创建2个版本的类,一个在app/src/release
,一个在app/src/debug
文件夹中。这利用了gradle提供的资源合并,您可以将多个源集合组合成一个。如果您要在/main
中放置一个而在/debug
中放置一个,则由于您有重复的类而无法编译,因此请确保为每个构建类型定义一个类(或更进一步,并将自己的文件夹添加到某些构建类型,如果有些重用相同的代码...)
// in /release
class MyThing() {
void doStuff() { /* nothing */ }
}
// in /debug
class MyThing() {
void doStuff() {
actual();
code();
}
}
现在你可以从你的Activity调用new MyThing().doStuff()
,它将a)在发布中什么也不做,b)在调试中做一些事情。我已经展示了一个例子,你可以将逻辑放在一个重复的类中,但是也可以只复制应该执行代码的整个活动......导致......
这种方法的最大问题是代码重复。 Android Studio不支持使用多个源集进行重构,因此您将在构建类型之间进行大量切换。每隔一段时间就会出现构建错误,因为您忘记在其中一个来源中修复某些内容,而这只是一个真正的痛苦。
你将有效地维护你以这种方式复制的所有代码两次,你应该将受影响的文件保持在最低限度(为了你自己)。
我强烈建议您使用BuildConfig.DEBUG
,不要过于担心。
答案 1 :(得分:0)
是的,使用flavor,在与'main'文件夹相同的级别创建一个名为'debug'的文件夹,并在其中添加'/ java',在此处创建仅调试文件类,但要在main中使用这些文件如果没有发布错误,你需要创建调用release / java的相同结构,并添加一些类的空白实现。