我希望有一种方法可以在发布版本上注释掉代码。
让我想到Ant的原因是 Proguard删除Log.D (调试)调用的方式并不令人满意,因为它将字符串文字保留在dex文件中,即使Log.D代码是通过它的优化技术被删除。 正如这个帖子所指出的那样 Removing unused strings during ProGuard optimisation
有人建议Ant可以与替换算法一起使用,但这会在运行时消除代码。我希望是否有一种评论代码的方式,因此它变为 // ant Log.d ,然后一旦编译 // ant 就可以删除。 / p>
我是蚂蚁的新手,我无法在Ant中找到任何用于评论代码的搜索结果。这不是推荐的做法吗?我觉得将所有文件复制到另一个目录,然后删除行,然后将其复制回来是有点过分的。如果编译失败,您将把代码留在另一个目录中。
所以目前我使用下面的正则表达式模式来注释掉代码。
<regexp pattern="(\s*)Log\.d\s*(\(.*\))\s*;"/>
<substitution expression="\1\/\/AntComment Log\.d\2;"/>
我想知道是否有更好的方法,即内置的处理评论的方式。
还有一种方法可以运行ant正则表达式来查看它的内容吗?
听 Jean Waghetti 我用条件编译
尝试了一些代码我只是尝试了一些变化,似乎需要你在同一个函数中使用if(DEBUG)。所以这段代码最终会在classes.dex文件中包含字符串文字。
Logger.myLog("Sensitive Info" + c); // you call this
//in Logger class - myLog method
static void myLog(String msg){
if(DEBUG){
如果您尝试进行更复杂的日志记录,需要确定是否要记录,但是使用带有DEBUG的和(&amp;&amp;)并最终在dex文件中添加字符串文字,例如:
public class SomeClass{
public final boolean log = DEBUG && figure_Log();
private boolean figure_Log(){
// some condition based on other settings
}
//in the code
if (log){
要实现更复杂的日志记录,您必须拥有:
if(DEBUG && log){
在所有日志记录调用之前,它会创建太多未使用的代码警告,并且对我来说看起来很难看。
答案 0 :(得分:0)
您可以根据最终的静态字段将要删除的代码放在条件块上。
static final DEBUG = false;
if (DEBUG) {
System.out.println("debug message");
}
Java Language Specification有一些关于“条件编译”的话。它不强制执行它,但if块中的代码可以优化,而不是在您的类中编译。 Oracle javac就是这样做的。
您可以通过proguard优化传递您的类,如果您的编译器之前没有,它(几乎)肯定会剥离这部分代码。