2011-11-11 54 views
3

我有这样的代码:Android的Java编译器opimization

MyLog.d("TAG", "debug string " + aVariable + " more debug string =" + anotherVariable); 

而且MyLog类就像

public void d(String tag, String message) { 
    private static final boolean DEBUG = true; 
    if (DEBUG) { 
     Log.d(tag, message); 
    } 
} 

我的问题是,如果我设置DEBUG为false,将Android Java编译器巧妙地检测到这代码

MyLog.d("TAG", "debug string " + aVariable + " more debug string =" + anotherVariable); 

线什么都不做

,它不会创建“调试字符串” + aVariable +“更调试字符串=” +临时字符串对象anotherVariable

+2

更好的问题是,这个重要性足以担心吗?微优化稍后会更好(意思绝不会)。 –

+0

这个相关的堆栈溢出问题是真的相关,但仍然没有明确的答案这个问题stackoverflow.com/questions/8050799 – Elemental

+0

@Elemental是的,目前的问题是更多的“ProGuard会走多远”... –

回答

2

你做字符串连接相关DEBUG事项任何事情之前:我怀疑这将被ProGuard优化出来,虽然Log.d内部MyLog.d的呼叫会消失。

如果您检查字节码,那么值得回报;我很好奇ProGuard能够通过呼叫链来检测死码。如果字符串连接消失,我会感到惊讶。

您也不能在方法中声明像这样的变量private

+1

+1感兴趣,如果proguard剥离出来! – Peterdk