Ant如何注释发布版本的代码

时间:2013-08-07 02:15:28

标签: android logging ant comments

我希望有一种方法可以在发布版本上注释掉代码。

让我想到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){ 

在所有日志记录调用之前,它会创建太多未使用的代码警告,并且对我来说看起来很难看。

1 个答案:

答案 0 :(得分:0)

您可以根据最终的静态字段将要删除的代码放在条件块上。

static final DEBUG = false;

if (DEBUG) {
    System.out.println("debug message");
}

Java Language Specification有一些关于“条件编译”的话。它不强制执行它,但if块中的代码可以优化,而不是在您的类中编译。 Oracle javac就是这样做的。

您可以通过proguard优化传递您的类,如果您的编译器之前没有,它(几乎)肯定会剥离这部分代码。