如何在构建Android应用程序的发布版本之前删除所有调试日志记录调用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在构建Android应用程序的发布版本之前删除所有调试日志记录调用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2036字,纯文字阅读大概需要3分钟。
内容图文
根据谷歌的说法,在将我的Android应用程序发布到Google Play之前,我必须“停用对源代码中任何Log方法的调用”.摘自publication checklist第3节:
Make sure you deactivate logging and disable the debugging option before you build your application for release. You can deactivate logging by removing calls to Log methods in your source files.
我的开源项目很大,每次发布时手动执行都很痛苦.此外,删除日志行可能很棘手,例如:
if(condition)
Log.d(LOG_TAG, "Something");
data.load();
data.show();
如果我对日志行进行注释,则条件适用于下一行,并且可能不会调用load().这种情况是否足够罕见,我可以决定它不应该存在?
那么,是否有更好的源代码级方法呢?或者可能有一些聪明的ProGuard语法可以有效但安全地删除所有日志行?
解决方法:
我发现一个更容易的解决方案是忘记所有的if检查并在我们调用Ant释放目标时使用ProGuard去除任何Log.d()或Log.v()方法调用.
这样,我们总是为常规构建输出调试信息,而不必为发布版本进行任何代码更改. ProGuard还可以对字节码执行多次传递,以删除其他不需要的语句,空块,并可以在适当的情况下自动内联短方法.
例如,这是一个非常基本的Android ProGuard配置:
-dontskipnonpubliclibraryclasses
-dontobfuscate
-forceprocessing
-optimizationpasses 5
-keep class * extends android.app.Activity
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
因此,您可以将其保存到文件中,然后从Ant调用ProGuard,传入刚刚编译的JAR和您正在使用的Android平台JAR.
另请参阅ProGuard手册中的the examples.
更新(4.5年后):现在我使用Timber进行Android日志记录.
它不仅比默认的Log实现更好 – 日志标记是自动设置的,并且很容易记录格式化的字符串和异常 – 但您也可以在运行时指定不同的日志记录行为.
在此示例中,日志记录语句将仅在我的应用程序的调试版本中写入logcat:
Timber在我的Application onCreate()方法中设置:
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
然后我的代码中的任何其他地方都可以轻松记录:
Timber.d("Downloading URL: %s", url);
try {
// ...
} catch (IOException ioe) {
Timber.e(ioe, "Bad things happened!");
}
有关更高级的示例,请参阅Timber sample app,其中所有日志语句在开发期间发送到logcat,在生产中,不会记录任何调试语句,但会向Crashlytics静默报告错误.
内容总结
以上是互联网集市为您收集整理的如何在构建Android应用程序的发布版本之前删除所有调试日志记录调用?全部内容,希望文章能够帮你解决如何在构建Android应用程序的发布版本之前删除所有调试日志记录调用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。