用Logs进行基础安卓debugging

就像大多数软件工程领域,debugging在安卓开发中扮演重要的角色。正确的设置你的应用debugging能够减少大量时间和困惑。不幸的事,在我的经验看来,没有很多初学者学着正确的用安卓SDK自带的工具类。除非你是以为有经验的开发者,这是我个人的看法,安卓debugging应该按照一套模式。因为以下几点原因会带来一些好处:

  • 它能帮你在代码间预见bugs。为你的开发工作区设立debugging将会给你带来领先当将来可能遇到bug时。
  • 在debugging的过程中,它给你中央化的控制力。混乱稀少的安排log消息会让你的logcat输出很难推测debuggings结果。打开或关闭一些log消息组,能让你的生活简单多了,特别是当你的应用很复杂时。

Log 类

你们可能不知到,安卓SDK自带了一个有用的logging工具类叫做android.util.Log. 这个类允许打出的log消息根据严重度分类;每种LOG方法有自己的消息,按照如下从低到高的优先级:

  • Log.v() 方法输出 log verbose messages (啰唆的log消息).
  • Log.d() 方法输出log debug messages.
  • Log.i() 方法输出log informational messages (log 情报消息).
  • Log.w() 方法输出log warnings(警告).
  • Log.e() 方法输出log errors(错误).
  • Log.wtf() 用来log应该永远不会发生的事件。("wtf" 是多么可怕的失败的缩写),就像java的assert方法。

大家应该总是去考虑用适当的这六种方法来过滤你的logcat输出。去理解什么时候应该往你的应用里加log也很重要:

  • Verbose logs除了开发阶段,其他时候都不应该加进程序里。当你的程序准备发布到世界上时,你要么把这些log注释掉,要么用ProGuard去掉你JAR执行包里的verbose log(Chrstopher 在StackOverflow帖子里给了答案http://stackoverflow.com/q/2018263/844882)。
  • Debug logs 被编译进去但是在运行时被忽略。
  • Error,warning和informational logs 应该一直保留。

一个简单的模式

下面是一个简单的debugging实现方法。一个全局static string变量来表示特定的类(比如一个Actiity、service、adapter等等),一个boolean变量表示log信息该不该被logcat打出。

public class SampleActivity extends Activity {

  /**
   * A string constant to use in calls to the "log" methods. Its
   * value is often given by the name of the class, as this will 
   * allow you to easily determine where log methods are coming
   * from when you analyze your logcat output.
   */
  private static final String TAG = "SampleActivity";

  /**
   * Toggle this boolean constant's value to turn on/off logging
   * within the class. 
   */
  private static final boolean VERBOSE = true;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (VERBOSE) Log.v(TAG, "+++ ON CREATE +++");
  }

  @Override
  public void onStart() {
    super.onStart();
    if (VERBOSE) Log.v(TAG, "++ ON START ++");
  }

  @Override
  public void onResume() {
    super.onResume();
    if (VERBOSE) Log.v(TAG, "+ ON RESUME +");
  }
}

别担心你的log信息在logcat中很有创意。比如上边这个例子运行后logcat会输出的很有格式、很适合人类阅读:

V SampleActivity +++ ON CREATE +++
V SampleActivity ++ ON START++
V SampleActivity + ON RESUME +

总结

这篇帖子简单的介绍了安卓debugging可以(应该)遵循的基本思路。将来会介绍的更深入一些。


Refference:

Alex Lockwood, May 30, 2012, http://www.androiddesignpatterns.com/2012/05/intro-to-android-debug-logging.html

在Unity中,要使用android.permission.READ_LOGS权限,需要根据不同的Unity版本和Bugly Unity Plugin版本进行相应的配置。根据引用[1]中的Android SDK使用指南,可以修改导出的Android工程的AndroidManifest.xml文件,将android.permission.READ_LOGS权限添加到权限声明中。具体步骤如下: 1. 打开Unity项目工程。 2. 导入最新版本的Bugly Unity Plugin。根据引用中的通用部分集成步骤,下载并导入Bugly Unity Plugin的相关文件到您的Unity工程中。 3. 打开导出的Android工程的AndroidManifest.xml文件。这个文件位于Unity项目工程的Assets/Plugins/Android目录下。 4. 在AndroidManifest.xml文件中的权限声明部分,添加如下权限: <uses-permission android:name="android.permission.READ_LOGS" /> 通过以上步骤,您就可以将android.permission.READ_LOGS权限添加到Unity项目的AndroidManifest.xml文件中,以实现读取logcat日志的功能。请注意,根据具体的Bugly Unity Plugin版本和Unity版本,可能还需要执行其他配置和集成步骤,具体可以参考Bugly Unity Plugin的官方文档或相关资源。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Bugly Unity Plugin](https://blog.csdn.net/qq_39816832/article/details/80238872)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [unity--关于自动添加READ_PHONE_STATE权限](https://blog.csdn.net/lalate/article/details/84340644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值