据谷歌称,在发布我的Android应用程序之前,我必须" 停用源代码中对Log方法的任何调用 ".摘录自出版物清单的第5部分:
在构建应用程序以进行发布之前,请确保停用日志记录并禁用调试选项.您可以通过删除源文件中对Log方法的调用来停用日志记录.
我的开源项目很大,每次发布时手动执行都很痛苦.此外,删除日志行可能很棘手,例如:
if(condition)
Log.d(LOG_TAG, "Something");
data.load();
data.show();
Run Code Online (Sandbox Code Playgroud)
如果我对日志行进行注释,则条件适用于下一行,并且可能不会调用load().这种情况是否足够罕见,我可以决定它不应该存在?
这是在官方清单上,所以我想很多人会定期这样做.
那么,如何有效但安全地删除所有日志行?
我想阅读并回应我的应用程序中的logcat日志.
我找到了以下代码:
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(log.toString());
}
catch (IOException e) {}
Run Code Online (Sandbox Code Playgroud)
此代码确实返回在应用程序启动之前所做的logcat日志 -
但是有可能连续监听甚至新的logcat日志吗?
在我的logcat中输出太多,所以我想用一些关键字过滤它,基本上只显示包含关键字的输出.有没有办法通过UI在Android Studio中执行此操作?
我假设大多数人都知道android.util.Log所有日志记录方法都接受'String tag'作为第一个参数.
我的问题是你通常如何在应用程序中标记日志? 我见过这样的硬编码:
public class MyActivity extends Activity {
private static final String TAG = "MyActivity";
//...
public void method () {
//...
Log.d(TAG, "Some logging");
}
}
Run Code Online (Sandbox Code Playgroud)
由于许多原因,这看起来不太好:
是否有任何巧妙的方法来获得课程的TAG?
我正在阅读Android发布文档,他们说要从我的代码中删除所有日志调用.我e.printStackTrace()在我的代码中有一些调用,可以打印为我程序正常运行的一部分(即,如果文件还不存在).
我还应该删除这些电话吗?
我在发布Android应用程序时包含此ProGuard配置以去除调试日志语句:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作 - 我可以从ProGuard日志和Android日志输出中看到Log.d("This is a debug statement");被删除的调用.
但是,如果我在此阶段反编译应用程序,我仍然可以看到所有使用的String文字 - 即This is a debug statement在此示例中.
有没有办法String从字节码中删除不再需要的每个?
我在配置Android日志时遇到了一些困难.这是我的代码的样子:
if (Log.isLoggable("MY_TAG", Log.VERBOSE)) {
Log.v("MY_TAG", "Here's a log message");
}
Run Code Online (Sandbox Code Playgroud)
很简单吧?
但是,我在Log.isLoggable("MY_TAG", Log.VERBOSE)返回true时遇到了很多困难.
根据http://developer.android.com/reference/android/util/Log.html,我尝试将local.prop文件添加到/ data /目录,如下所示:
log.tag.MY_TAG=VERBOSE
Run Code Online (Sandbox Code Playgroud)
但没有运气.我也尝试过:
System.setProperty("log.tag.MY_TAG", String.valueOf(Log.VERBOSE));
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
关于我在这里做错了什么的想法?我在Nexus 1上运行Android 2.1-update1,如果这有任何区别的话.
我有一个使用很多Log.d()或Log.e()调用调用的应用程序.现在我想创建我的最终发布包.Eclipse的Android Export功能提到删除"Debuggable"清单中的标志,我已经完成了.我是否还应该评论所有Log调用以提高应用程序的性能,或者这些调用在不可调试的最终版本包中什么都不做?
我YuvImage用来压缩android.hardware.Camerajpeg 的feed.从那时起,我一直skia onFlyCompress在logcat中看到消息,这完全污染了它.有没有办法禁用此消息?我知道我可以过滤logcat输出,但这意味着一直到处都做,这不是一个修复,而是一个解决方法.我根本不想要打印这些消息
我试图将现有的SDK软件挂在Android设备上,并且所述SDK的一个依赖项是Apache log4j.我能够将我的测试程序加载到android模拟器上但是当调用log4j对象"PropertySetter"时,程序失败并出现验证异常.有没有办法改善这个问题?
android ×9
logging ×4
logcat ×3
android-log ×2
proguard ×2
exception ×1
log4j ×1
nexus-one ×1
production ×1