2

我知道,为了在应用程序发布时加快速度并消除 CPU 浪费,我可以简单地将其导出并proguard.cfg包含:

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}

但是......如果为了方便地最小化调试和发布版本之间的杂耍(总是需要在安装另一个之前完全卸载一个),我想始终运行调试版本,不是通过 USB 连接和如果未Settings => Applications => Development => USB debugging 选中,是否会执行任何 Log.v()、Log.i() 等?

我无法真正通过 USB 连接 DDMS 来亲自检查...所以,感谢您的任何提示。

4

2 回答 2

2

它仍会将您的日志消息写入内部日志缓冲区。

市场上有一些应用程序可以显示这个缓冲区,其中一个叫做 Android System Info 或类似的东西,AFAIR。

于 2011-10-16T17:45:26.373 回答
1

根据 ProGuard 手册( http://proguard.sourceforge.net/index.html#/manual/usage.html):

-assumenosideeffects class_specification

指定没有任何副作用的方法(除了可能返回一个值)。在优化步骤中,如果 ProGuard 可以确定没有使用返回值,它将删除对此类方法的调用。请注意,ProGuard 将分析您的程序代码以自动找到此类方法。它不会分析库代码,因此此选项可能有用。例如,您可以指定 System.currentTimeMillis() 方法,以便删除对它的任何空闲调用。请注意,ProGuard 将该选项应用于指定方法的整个层次结构。仅在优化时适用。一般来说,做出假设是危险的。您可以轻松破坏处理后的代码。仅当您知道自己在做什么时才使用此选项!

所以对 Log.v()、Log.i() 等的调用甚至不存在于 APK 中。

于 2011-10-16T15:14:48.453 回答