相关疑难解决方法(0)

如何在将应用程序发布到Google Play之前删除所有调试日志记录调用?

据谷歌称,在发布我的Android应用程序之前,我必须" 停用源代码中对Log方法的任何调用 ".摘录自出版物清单的第5部分:

在构建应用程序以进行发布之前,请确保停用日志记录并禁用调试选项.您可以通过删除源文件中对Log方法的调用来停用日志记录.

我的开源项目很大,每次发布时手动执行都很痛苦.此外,删除日志行可能很棘手,例如:

if(condition)
  Log.d(LOG_TAG, "Something");
data.load();
data.show();
Run Code Online (Sandbox Code Playgroud)

如果我对日志行进行注释,则条件适用于下一行,并且可能不会调用load().这种情况是否足够罕见,我可以决定它不应该存在?

这是在官方清单上,所以我想很多人会定期这样做.
那么,如何有效但安全地删除所有日志行?

logging android proguard android-log

381
推荐指数
12
解决办法
16万
查看次数

在应用程序中以编程方式读取logcat

我想阅读并回应我的应用程序中的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日志吗?

android logcat android-logcat

109
推荐指数
5
解决办法
6万
查看次数

如何在Android Studio中过滤logcat?

在我的logcat中输出太多,所以我想用一些关键字过滤它,基本上只显示包含关键字的输出.有没有办法通过UI在Android Studio中执行此操作?

logcat android-studio

91
推荐指数
8
解决办法
8万
查看次数

你通常如何标记日志条目?(机器人)

我假设大多数人都知道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放进你的班级.

是否有任何巧妙的方法来获得课程的TAG?

logging android

83
推荐指数
4
解决办法
5万
查看次数

我应该在发布之前从我的代码中删除e.printStackTrace()

我正在阅读Android发布文档,他们说要从我的代码中删除所有日志调用.我e.printStackTrace()在我的代码中有一些调用,可以打印为我程序正常运行的一部分(即,如果文件还不存在).

我还应该删除这些电话吗?

logging production android exception

41
推荐指数
1
解决办法
2万
查看次数

在ProGuard优化期间删除未使用的字符串

我在发布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 proguard

31
推荐指数
3
解决办法
7271
查看次数

Android日志记录级别

我在配置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,如果这有任何区别的话.

logging android nexus-one

25
推荐指数
3
解决办法
2万
查看次数

我应该在创建最终包时评论我的日志调用吗?

我有一个使用很多Log.d()Log.e()调用调用的应用程序.现在我想创建我的最终发布包.Eclipse的Android Export功能提到删除"Debuggable"清单中的标志,我已经完成了.我是否还应该评论所有Log调用以提高应用程序的性能,或者这些调用在不可调试的最终版本包中什么都不做?

android android-log

21
推荐指数
2
解决办法
6664
查看次数

从logcat中删除onFlyCompress消息

YuvImage用来压缩android.hardware.Camerajpeg 的feed.从那时起,我一直skia onFlyCompress在logcat中看到消息,这完全污染了它.有没有办法禁用此消息?我知道我可以过滤logcat输出,但这意味着一直到处都做,这不是一个修复,而是一个解决方法.我根本不想要打印这些消息

android logcat

15
推荐指数
1
解决办法
1610
查看次数

Android中的log4j支持

我试图将现有的SDK软件挂在Android设备上,并且所述SDK的一个依赖项是Apache log4j.我能够将我的测试程序加载到android模拟器上但是当调用log4j对象"PropertySetter"时,程序失败并出现验证异常.有没有办法改善这个问题?

android log4j android-emulator

14
推荐指数
2
解决办法
3万
查看次数