也许我误解了这个概念,但调试日志消息不应该只显示在未发布的应用程序中吗?
我已经用“文件”-“导出”编译了我的应用程序,它应该删除由代码的“Log.d(..)”转储的所有消息。但是,当我在运行 Eclipse 的同时运行通过 USB 连接的这个版本时,我看到各种调试消息在 LogCat 中公开显示。
我现在有点担心 - 据我记得,ProGuard 应该在创建发布版本时自动调用,但它似乎在应用程序中留下了调试注释(但其他方面似乎可以工作,因为函数名称已被混淆,我可以另见 Logcat)。
也许我误解了这个概念,但调试日志消息不应该只显示在未发布的应用程序中吗?
我已经用“文件”-“导出”编译了我的应用程序,它应该删除由代码的“Log.d(..)”转储的所有消息。但是,当我在运行 Eclipse 的同时运行通过 USB 连接的这个版本时,我看到各种调试消息在 LogCat 中公开显示。
我现在有点担心 - 据我记得,ProGuard 应该在创建发布版本时自动调用,但它似乎在应用程序中留下了调试注释(但其他方面似乎可以工作,因为函数名称已被混淆,我可以另见 Logcat)。
发布版本不会自动删除日志。而且您不应该(推荐)手动删除它们,因为您需要在为下一个版本等开发时将它们添加回来......,
最推荐的方法是使用Proguard。
它的作用是:将删除字节码中的日志,使它们在源代码中可用。
实现或使用:
在发布之前删除所有调试日志记录调用:是否有工具可以做到这一点?
除了删除日志之外,proguard 还可以通过多种方式帮助优化您的应用程序。
我想我找到了问题的原因 - 我有
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** i(...);
public static *** v(...);
}
在我当地的 proguard-project.txt 中,但尽管有这条线
proguard.config=${sdk.dir}\\tools\\proguard\\proguard-android-optimize.txt:proguard-project.txt
在我的 project.properties 文件中,proguard-project.txt 似乎从未因任何原因被使用过。我已将日志删除参数添加到我的 proguard-android-optimize.txt 中,现在它可以工作了,导出应用程序时会删除日志。
它不会删除日志语句!!!您可以手动删除它们,并将其作为更新提交,以防您发布应用程序。
更好的方法是,创建一个类,如 Globals,并在其中放置一个标志,上面写着 isDevelopement
public class Globals
{
static boolean isDevelopment = 1;
public static void log(String tag, String message)
{
if(isDevelopment==1)
Log.d(tag,message);
}
}
在每个有日志语句的地方,都可以这样称呼它
Globals.log("TAG", "MESSAGE");
所以这样,当你发布时,你只需要将 isDevelopment 更改为 0。日志就会消失。在处理它时,只需将其更改为 1。
希望这可以帮助