gpt4 book ai didi

java - 是否可以只为某个目标(Android 应用程序)编译一段代码?

转载 作者:行者123 更新时间:2023-11-30 00:09:44 25 4
gpt4 key购买 nike

我想了解执行代码块的最佳方法是什么,它只需要在调试目标、特定 Activity 上执行,而不依赖于“if”语句。此外,如果可以在为另一个目标编译同一应用程序时从编译中排除代码块。

最佳答案

老实说,最好和最简单的方法是执行以下仅在可调试应用程序中执行的操作:

if(BuildConfig.DEBUG) {
// run your piece of code
}

如果您在发布时使用混淆器,它将与您的应用中的任何其他无效代码一起被删除,因为对于发布构建,它的计算结果为“false”。这是简单的方法。


without being dependent on 'if' statements

在这种情况下,您需要创建 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) 在调试时执行某些操作。我已经展示了一个示例,您可以将逻辑单独放在一个重复的类中,但也可以只复制应该执行代码的整个 Activity ...导致...

这种方法最大的问题是代码重复。 Android Studio 不支持使用多个源集进行重构,因此您会经常在构建类型之间切换。每隔一段时间就会出现构建错误,因为您忘记修复其中一个源中的某些内容,这真的很痛苦。

您实际上必须将以这种方式复制的所有代码维护两次,并且您应该将受影响的文件保持在最低限度(为了您自己的利益)。

我强烈建议使用 BuildConfig.DEBUG,不要太担心它。

关于java - 是否可以只为某个目标(Android 应用程序)编译一段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48347896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com