1876人阅读评论(1)收藏举报

转载请注明出处:http://blog.csdn.net/awebkit


android中的插件开发中的示例代码已经给我们说明了如何打log,参看示例代码main.cpp

[cpp] view plain copy
  1. for(inti=0;i<argc;i++){
  2. if(!strcmp(argn[i],"DrawingModel")){
  3. if(!strcmp(argv[i],"Bitmap")){
  4. model=kBitmap_ANPDrawingModel;
  5. }
  6. elseif(!strcmp(argv[i],"Surface")){
  7. model=kSurface_ANPDrawingModel;
  8. }
  9. gLogI.log(kDebug_ANPLogType,"------%pDrawingModelis%d",instance,model);
  10. break;
  11. }
  12. }
我们可以使用gLogI.log打印调试信息。

gLogI的定义如下

[plain] view plain copy
  1. ANPLogInterfaceV0gLogI;

ANPLogInterfaceV0的定义如下(Android_npapi.h)

[cpp] view plain copy
  1. structANPLogInterfaceV0:ANPInterface{
  2. /**dumpsprintfmessagestothelogfile
  3. e.g.interface->log(instance,kWarning_ANPLogType,"valueis%d",value);
  4. */
  5. void(*log)(ANPLogType,constcharformat[],...);
  6. };
该结构的赋值如下(ANPLogInterface.cpp)
[cpp] view plain copy
  1. staticvoidanp_log(ANPLogTypelogType,constcharformat[],...){
  2. va_listargs;
  3. va_start(args,format);
  4. android_LogPrioritypriority;
  5. switch(logType){
  6. casekError_ANPLogType:
  7. priority=ANDROID_LOG_ERROR;
  8. break;
  9. casekWarning_ANPLogType:
  10. priority=ANDROID_LOG_WARN;
  11. break;
  12. casekDebug_ANPLogType:
  13. priority=ANDROID_LOG_DEBUG;
  14. break;
  15. default:
  16. priority=ANDROID_LOG_UNKNOWN;
  17. break;
  18. }
  19. LOG_PRI_VA(priority,"plugin",format,args);
  20. va_end(args);
  21. }
  22. voidANPLogInterfaceV0_Init(ANPInterface*value){
  23. ANPLogInterfaceV0*i=reinterpret_cast<ANPLogInterfaceV0*>(value);
  24. i->log=anp_log;
  25. }
而LOG_PRI_VA的调用关系如下

[plain] view plain copy
  1. LOG_PRI_VA@Log.h
  2. android_vprintLog@Log.h
  3. __android_log_vprint@Log.h
  4. __android_log_write@logd_write.c
  5. write_to_log@logd_write.c
  6. __write_to_log_init@logd_write.c
  7. __write_to_log_kernel@logd_write.c
  8. writev@uio.c


注:

1. 插件的打印信息的channel为plugin

2. android系统据我所知,只有如下log会受到是否打开DEBUG的影响

LOGV* LOG_FATAL*

更多相关文章

  1. Launcher源码中Intent.createChooser()实现原理及小例子
  2. Android(安卓)EditText自定义样式的方法
  3. ViewGroup和LayoutParams之间的关系
  4. CDH基于Kerberos身份认证和基于Sentry的权限控制功能的测试示例
  5. Android(安卓)selector 的shape、gradient、stroke、corners 、s
  6. android可重复利用的自定义提示确认框
  7. log函数封装,让WIN32和android ndk共用相同的log函数,方便调试
  8. Android(安卓)ApiDemos示例解析(165):Views->Layouts->TableLayo
  9. sildingdraw的使用和需要注意的地方

随机推荐

  1. 用map代替纯JavaScript对象[每日前端夜话
  2. 数据库数据完整性
  3. Java内存模型-堆和栈
  4. 数据库-事务处理
  5. 一位程序员的爱情故事
  6. 数据库-范式
  7. Java内存模型-JMM简介
  8. SQL语句类别
  9. 软件架构师之基本素质
  10. 数据库-关系代数