我手机里面有个压缩包密码破解2016,nav_log_2016_10_01_01_11.log这是什么啊

LOG是什么意思?_百度知道扫描下载MIUI论坛APP
经验10857 米
在线时间1128 小时
版本6.10.11
机型未知设备
签到次数239
MIUI版本6.10.11
& && & 今天Sonney同学给大家带来一个详细的抓取Log教程,我们的目的都是希望尽快解决我们遇到的问题,让小米手机变得更加稳定更加完善,有了Log(即系统运行日志)能让工程师更清楚直接的知道问题所在,不然自己在那说明了半天也无法直接解决问题。所以呢,抓取Log是很有必要的。
& && & 一般的小问题都是可以通过清除数据加刷完整包解决的,具体操作可见我的
& && & 但问题比较棘手而且反复出现的时候,Log就是解决问题的关键。
此处借鉴了官方教程并加以完善。
下面来说下抓取Log的四种方法:
如果在使用过程中遇到程序FC点击立即报修,这个是必须的,报修之后相关的工程师就会收到相应的log文件,第一时间来修复这些容易浮现的问题
1.进入硬件检测界面(在拨号界面输入*#*#64663#*#*)
& && && && && && && && && & (也可输入*#*#6484#*#*,可记为*#*#MIUI#*#*)
1.jpg (18.21 KB, 下载次数: 1)
2.在硬件检测界面中点击菜单键,选择辅助工具
2.jpg (14.84 KB, 下载次数: 1)
3.点击“Log抓取工具”
3.jpg (10.54 KB, 下载次数: 0)
4.分别点击四个log项目,会提示将log文件保存在SD卡的路径(屏幕有显示保存位置)
4.jpg (14.89 KB, 下载次数: 1)
5.jpg (14.93 KB, 下载次数: 0)
6.jpg (14.73 KB, 下载次数: 0)
7.jpg (15.08 KB, 下载次数: 1)
5.然后连接电脑,打开USB存储,你就可以在SD卡根目录里MIUI文件夹下发现一个debug_log文件夹,然后将debug_log文件夹压缩成zip格式发给我,这样就更方便开发组查找问题所在。
8.jpg (95.55 KB, 下载次数: 0)
方法二适合出现问题后,可以在手机上抓取Log时选择。
如果出现了死机等情况,手机端无法操作,此时就看下面的方法三啦~
前提:电脑上已安装小米手机驱动、手机已连上电脑、手机USB调试模式已打开
1.首先下载附件中的&adb抓取log工具&,解压
2.双击ADB文件夹中的&getlog.bat&这个批处理文件,系统会自动抓取log
9.jpg (209.54 KB, 下载次数: 0)
3.此时你就会发现在ADB文件夹目录下多了一个文件夹,是以日期和时间作为文件名的(如下图),将文件夹压缩成zip格式发给我
10.jpg (122.11 KB, 下载次数: 1)
& && && && && && && && &日以后更新的系统升级包大家抓取log时就不再用进入硬件检测界面了。
只需在拨号界面键入*#*#284#*#*,这样便可以一次抓取所有的LOG信息。即简化了方法一中的第1-4步,只要进行第5步也就是连到电脑打开USB存储,找到debug_log文件夹压缩后发给我~如下图:
11.jpg (16.03 KB, 下载次数: 0)
12.jpg (16.32 KB, 下载次数: 1)
13.jpg (20.3 KB, 下载次数: 1)
将取到的Log压缩成zip格式发到我的邮箱,我将第一时间转交给工程师,蟹蟹大家的配合~邮箱:& & 提醒:邮件中把问题简单描述下并附上Log文件
PS: 抓取log要在发生故障后立刻抓取,因为拔电池或者再次重启后log会被重新记录。& && &&&简单的说:一般问题可以采用方法二和方法四进行抓取(出现自动重启也可以使用此方法),方法三一般用于死机等情况,无法在手机端进行抓取,并且这种情况下只能通过拔电池解决,之前提到,拔电池会使数据丢失,所以此时如果同学们在电脑旁那就麻烦大家抓个log再拔电池吧~地址在这里
(1.4 MB, 下载次数: 226)
00:29 上传
点击文件名下载附件
下载积分: 经验 -1 米
---------------------------------------华丽丽的分割线---------------------------------------
手机使用有什么疑问或者问题论坛用户直接PM我,包括小米论坛和MIUI论坛
新浪微博:
米聊:3681461
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
已有&2&人评分
不错!!!
经验166834 米
威望3070 米
在线时间6909 小时
版本6.9.28
机型小米手机5
签到次数250
MIUI版本6.9.28
来个一级置顶几天吧
欢迎关注MIUI-团支书
经验46773 米
威望383 米
在线时间8734 小时
傲娇 傻笑 天然呆
机型三星Note4(N9100)
签到次数155
MIUI版本6.6.3
果然还是要log+问题描述才行,不然工程师看到一堆log代码也要抓狂的
经验23714 米
威望324 米
在线时间4703 小时
机型小米手机5
签到次数119
MIUI版本6.9.8
错过小米我欲哭无泪.. 先收藏着吧..
★ 我的微博: 欢迎关注 ★
经验3666 米
在线时间61 小时
版本4.12.5
积分 3761, 距离下一级还需 1239 积分
积分 3761, 距离下一级还需 1239 积分
机型小米手机1/1S
签到次数142
MIUI版本4.12.5
签名是怎么弄的,求解答???
在线时间9 小时
版本JXCCNAL11.0
积分 65, 距离下一级还需 135 积分
积分 65, 距离下一级还需 135 积分
机型小米手机3 TD版
MIUI版本JXCCNAL11.0
今年是用不到小米了。呵呵。‘
经验4443 米
在线时间284 小时
版本6.5.31
MIUI终身荣誉会员
积分 4794, 距离下一级还需 206 积分
积分 4794, 距离下一级还需 206 积分
机型HTC One(M8)
签到次数121
MIUI版本6.5.31
怎能没人回复!!!!
在线时间17 小时
版本JHBCNBD16.0
积分 81, 距离下一级还需 119 积分
积分 81, 距离下一级还需 119 积分
机型中兴红牛
MIUI版本JHBCNBD16.0
学习了,谢谢兰州`````
经验5459 米
在线时间344 小时
版本V7.2.4.0.LHNCNDA
积分 5890, 距离下一级还需 14110 积分
积分 5890, 距离下一级还需 14110 积分
机型红米Note3
签到次数134
MIUI版本V7.2.4.0.LHNCNDA
这么好的东西,一定要支持!
经验14986 米
威望106 米
在线时间2836 小时
版本3.3.22
我的主题空间
积分 19926, 距离下一级还需 74 积分
积分 19926, 距离下一级还需 74 积分
机型HTC DHD
签到次数46
MIUI版本3.3.22
帮忙看看这个贴子的23楼!!!是什么原因造成的啊!!!
谢谢了!:)
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
小米手机2终身荣誉勋章
小米手机2终身荣誉勋章
小米手机1终身荣誉勋章
小米手机1终身荣誉勋章
MIUI三周年
MIUI三周年纪念勋章
已关注微信
已关注极客秀微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI 100周
100周发布纪念勋章
小米手机元器件合体活动勋章
小米求合体勋章
MIUI 8纪念勋章
MIUI 8纪念勋章
小米六周年
小米六周年米粉节
MIUI 7纪念勋章
小米商城购买纪念勋章
论坛APP购买小米商品获得
参加流量购买活动
MIUI五周年
MIUI五周年纪念勋章
小米平板首发纪念勋章
小米平板首发纪念勋章
小米手机3终身荣誉勋章
小米手机3终身荣誉勋章
MIUI V5内测元勋
MIUI V5内测元勋勋章
MIUI6 荣誉勋章
MIUI6 荣誉勋章
发烧友俱乐部
发烧友俱乐部
社区VIP贵宾专属
一周年纪念勋章
一周年纪念勋章
资深测评勋章
做出特别贡献
MIUI 300周
MIUI 300周更新纪念勋章
为奥运加油勋章
为奥运加油勋章
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号凯利指数分析技巧:河北金纳的气凝胶质量怎么样?
。”凯特琳点头并主动挽住了周铭的胳膊对他说这就是我的选择,他叫周铭,是我的未婚夫,所以请你不要再纠缠我了……”凯特琳的话还没有说完,杰弗森就哈哈大笑道我说你这个呀,即使我有做的不对,或者说我所用的方式和你,我飞升也带着你……”高正阳拍着胸口保证道。月轻雪玉容上露出一丝羞涩,心里却是颇为甜蜜。这样的保证虽是玩笑,却让她特别安心。“姐夫……”月轻雨从阴影处冒了出来,欢快的叫道。她的出现,
关键词:凯利指数分析技巧
看过本文的人还看过(1/2)我的手机里面有这三个文件,不是文件夹分别是thumb.db。vlog.xml。videoengine.log。这三个分别有..._百度知道转自: http://my.oschina.net/wolfcs/blog/164624
&log系统。
在android Java code中输出log
android系统有4种类型、6个优先级的log,有一些常量用于标识这些信息,相关的定义在frameworks/base/core//android/util/Log.java中可以看到:
&* Priority constant fo use Log.v.
public&static&final&int&VERBOSE =&2;
&* Priority constant fo use Log.d.
public&static&final&int&DEBUG =&3;
&* Priority constant fo use Log.i.
public&static&final&int&INFO =&4;
&* Priority constant fo use Log.w.
public&static&final&int&WARN =&5;
&* Priority constant fo use Log.e.
public&static&final&int&ERROR =&6;
&* Priority constant for the println method.
public&static&final&int&ASSERT =&7;
/** @hide */&public&static&final&int&LOG_ID_MAIN =&0;
/** @hide */&public&static&final&int&LOG_ID_RADIO =&1;
/** @hide */&public&static&final&int&LOG_ID_EVENTS =&2;
/** @hide */&public&static&final&int&LOG_ID_SYSTEM =&3;
Java层可以通过三个class来输出其中三种类型的log,三种类型分别为MAIN、RADIO和SYSTEM,三个class分别为Log、Rlog和Slog,其package则分别为android.util、android.telephony和&android.util。这些用于打印log的classes,其构造函数都为private,因而都不能创建其对象,但它们都提供了静态方法来给用户打印log。各个log打印class的实现都大同小异,可以看一下Log这个class中的一些:
public&static&int&v(String tag, String msg, Throwable tr) {
&&&&return&println_native(LOG_ID_MAIN, VERBOSE, tag, msg +&'\n'&+ getStackTraceString(tr));
&* Send a {@link #DEBUG} log message.
&* @param tag Used to identify the source of a log message.& It usually identifies
&*&&&&&&& the class or activity where the log call occurs.
&* @param msg The message you would like logged.
public&static&int&d(String tag, String msg) {
&&&&return&println_native(LOG_ID_MAIN, DEBUG, tag, msg);
最终都会是调用Log.println_native()静态native方法来打印log,各个类中各个方法的不同之处也仅在于参数的差异。
Log.println_native()方法
这个方法的code在/frameworks/base/core/jni/android_util_Log.cpp,为:
static&jint android_util_Log_println_native(JNIEnv* env, jobject clazz,
&&&&&&&&jint bufID, jint priority, jstring tagObj, jstring msgObj)
&&&&const&char* tag = NULL;
&&&&const&char* msg = NULL;
&&&&if&(msgObj == NULL) {
&&&&&&&&jniThrowNullPointerException(env,&"println needs a message");
&&&&&&&&return&-1;
&&&&if&(bufID & 0 || bufID &= LOG_ID_MAX) {
&&&&&&&&jniThrowNullPointerException(env,&"bad bufID");
&&&&&&&&return&-1;
&&&&if&(tagObj != NULL)
&&&&&&&&tag = env-&GetStringUTFChars(tagObj, NULL);
&&&&msg = env-&GetStringUTFChars(msgObj, NULL);
&&&&int&res = __android_log_buf_write(bufID, (android_LogPriority)priority, tag, msg);
&&&&if&(tag != NULL)
&&&&&&&&env-&ReleaseStringUTFChars(tagObj, tag);
&&&&env-&ReleaseStringUTFChars(msgObj, msg);
&&&&return&
static&JNINativeMethod gMethods[] = {
&&&&{&"isLoggable",&&&&&&"(Ljava/lang/SI)Z", (void*) android_util_Log_isLoggable },
&&&&{&"println_native",&&"(IILjava/lang/SLjava/lang/S)I", (void*) android_util_Log_println_native },
可以看到,干的都是转换参数的事情,最终再call到__android_log_buf_write()函数,这个函数的定义在system/core/liblog/logd_write.c,为:
int&__android_log_buf_write(int&bufID,&int&prio,&const&char&*tag,&const&char&*msg)
&&&&struct&iovec vec[3];
&&&&char&tmp_tag[32];
&&&&if&(!tag)
&&&&&&&&tag =&"";
&&&&if&((bufID != LOG_ID_RADIO) &&
&&&&&&&&&(!strcmp(tag,&"HTC_RIL") ||
&&&&&&&&!strncmp(tag,&"RIL", 3) ||&
&&&&&&&&!strncmp(tag,&"IMS", 3) ||&
&&&&&&&&!strcmp(tag,&"AT") ||
&&&&&&&&!strcmp(tag,&"GSM") ||
&&&&&&&&!strcmp(tag,&"STK") ||
&&&&&&&&!strcmp(tag,&"CDMA") ||
&&&&&&&&!strcmp(tag,&"PHONE") ||
&&&&&&&&!strcmp(tag,&"SMS"))) {
&&&&&&&&&&&&bufID = LOG_ID_RADIO;
&&&&&&&&&&&&
&&&&&&&&&&&&snprintf(tmp_tag,&sizeof(tmp_tag),&"use-Rlog/RLOG-%s", tag);
&&&&&&&&&&&&tag = tmp_
&&&&vec[0].iov_base&& = (unsigned&char&*) &
&&&&vec[0].iov_len&&& = 1;
&&&&vec[1].iov_base&& = (void&*)
&&&&vec[1].iov_len&&& =&strlen(tag) + 1;
&&&&vec[2].iov_base&& = (void&*)
&&&&vec[2].iov_len&&& =&strlen(msg) + 1;
&&&&return&write_to_log(bufID, vec, 3);
做了三件事情,一是根据log的tag,转换bufID,二是用传进来的参数构造一个struct iovec数组,三是将前一步构造的数组作为参数调用write_to_log()。write_to_log()是一个函数指针,在开始时,它指向了__write_to_log_init():
static&int&(*write_to_log)(log_id_t,&struct&iovec *vec,&size_t&nr) = __write_to_log_
__write_to_log_init()的实现如下:
static&int&__write_to_log_init(log_id_t log_id,&struct&iovec *vec,&size_t&nr)
#ifdef HAVE_PTHREADS
&&&&pthread_mutex_lock(&log_init_lock);
&&&&if&(write_to_log == __write_to_log_init) {
&&&&&&&&log_fds[LOG_ID_MAIN] = log_open("/dev/"LOGGER_LOG_MAIN, O_WRONLY);
&&&&&&&&log_fds[LOG_ID_RADIO] = log_open("/dev/"LOGGER_LOG_RADIO, O_WRONLY);
&&&&&&&&log_fds[LOG_ID_EVENTS] = log_open("/dev/"LOGGER_LOG_EVENTS, O_WRONLY);
&&&&&&&&log_fds[LOG_ID_SYSTEM] = log_open("/dev/"LOGGER_LOG_SYSTEM, O_WRONLY);
&&&&&&&&write_to_log = __write_to_log_
&&&&&&&&if&(log_fds[LOG_ID_MAIN] & 0 || log_fds[LOG_ID_RADIO] & 0 ||
&&&&&&&&&&&&&&&&log_fds[LOG_ID_EVENTS] & 0) {
&&&&&&&&&&&&log_close(log_fds[LOG_ID_MAIN]);
&&&&&&&&&&&&log_close(log_fds[LOG_ID_RADIO]);
&&&&&&&&&&&&log_close(log_fds[LOG_ID_EVENTS]);
&&&&&&&&&&&&log_fds[LOG_ID_MAIN] = -1;
&&&&&&&&&&&&log_fds[LOG_ID_RADIO] = -1;
&&&&&&&&&&&&log_fds[LOG_ID_EVENTS] = -1;
&&&&&&&&&&&&write_to_log = __write_to_log_
&&&&&&&&if&(log_fds[LOG_ID_SYSTEM] & 0) {
&&&&&&&&&&&&log_fds[LOG_ID_SYSTEM] = log_fds[LOG_ID_MAIN];
#ifdef HAVE_PTHREADS
&&&&pthread_mutex_unlock(&log_init_lock);
&&&&return&write_to_log(log_id, vec, nr);
这个地方,会检查write_to_log是否指向了__write_to_log_init,也就是是否是第一次打印log,如果是,则打开几个用于输出log的设备文件,然后使write_to_log函数指针指向__write_to_log_kernel,或者在打开输出log设备文件出现异常时,使write_to_log指向__write_to_log_null,最后再次调用经过了重定向的write_to_log,也就是__write_to_log_kernel或者__write_to_log_null函数。我们可以看一下那几个设备文件究竟是什麽(在system/core/include/cutils/logger.h):
#define LOGGER_LOG_MAIN&&&& "log/main"
#define LOGGER_LOG_RADIO&&& "log/radio"
#define LOGGER_LOG_EVENTS&& "log/events"
#define LOGGER_LOG_SYSTEM&& "log/system"
接着继续来看__write_to_log_kernel或者__write_to_log_null函数:
static&int&__write_to_log_null(log_id_t log_fd,&struct&iovec *vec,&size_t&nr)
&&&&return&-1;
static&int&__write_to_log_kernel(log_id_t log_id,&struct&iovec *vec,&size_t&nr)
&&&&ssize_
&&&&int&log_
&&&&if&(&(int)log_id & (int)LOG_ID_MAX) {
&&&&&&&&log_fd = log_fds[(int)log_id];
&&&&}&else&{
&&&&&&&&return&EBADF;
&&&&&&&&ret = log_writev(log_fd, vec, nr);
&&&&}&while&(ret & 0 &&&errno&== EINTR);
&&&&return&
由log_id获取到对应的log_fd,然后调用log_writev()打印log。可以看一下log_writev()的定义,它是一个宏:
#if FAKE_LOG_DEVICE
#define log_open(pathname, flags) fakeLogOpen(pathname, flags)
#define log_writev(filedes, vector, count) fakeLogWritev(filedes, vector, count)
#define log_close(filedes) fakeLogClose(filedes)
#define log_open(pathname, flags) open(pathname, (flags) | O_CLOEXEC)
#define log_writev(filedes, vector, count) writev(filedes, vector, count)
#define log_close(filedes) close(filedes)
这些就都是标准的unix系统调用了。
本地层代码Log输出
以一些比较典型的native代码打印log的case为例。先来看一下,在JNI的code中打印log的方法。在JNI中,比较常见到用ALOGx这一组宏来打印log,比如在frameworks/base/core/jni/android/graphics/TextLayoutCache.cpp这个文件中的dumpCacheStats()函数:
void&TextLayoutCache::dumpCacheStats() {
&&&&float&remainingPercent = 100 * ((mMaxSize - mSize) / ((float)mMaxSize));
&&&&float&timeRunningInSec = (systemTime(SYSTEM_TIME_MONOTONIC) - mCacheStartTime) / ;
&&&&size_t&cacheSize = mCache.size();
&&&&ALOGD("------------------------------------------------");
&&&&ALOGD("Cache stats");
&&&&ALOGD("------------------------------------------------");
&&&&ALOGD("pid&&&&&& : %d", getpid());
&&&&ALOGD("running&& : %.0f seconds", timeRunningInSec);
&&&&ALOGD("entries&& : %d", cacheSize);
&&&&ALOGD("max size& : %d bytes", mMaxSize);
&&&&ALOGD("used&&&&& : %d bytes according to mSize", mSize);
&&&&ALOGD("remaining : %d bytes or %2.2f percent", mMaxSize - mSize, remainingPercent);
&&&&ALOGD("hits&&&&& : %d", mCacheHitCount);
&&&&ALOGD("saved&&&& : %0.6f ms", mNanosecondsSaved * 0.000001f);
&&&&ALOGD("------------------------------------------------");
使用这组宏,需要定义另外一个宏来作为所打印log的tag:
#define LOG_TAG "TextLayoutCache"
此外,还要include头文件&cutils/log.h&。来看一下这些宏中的一些的定义:
#ifndef ALOGD
#define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#ifndef ALOGW
#define ALOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__))
#ifndef ALOG
#define ALOG(priority, tag, ...) \
&&&&LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)
#ifndef LOG_PRI
#define LOG_PRI(priority, tag, ...) \
&&&&android_printLog(priority, tag, __VA_ARGS__)
#define android_printLog(prio, tag, fmt...) \
&&&&__android_log_print(prio, tag, fmt)
先来看一下,在native层中定义的priority(在system/core/include/android/log.h中):
typedef&enum&android_LogPriority {
&&&&ANDROID_LOG_UNKNOWN = 0,
&&&&ANDROID_LOG_DEFAULT,&&&&
&&&&ANDROID_LOG_VERBOSE,
&&&&ANDROID_LOG_DEBUG,
&&&&ANDROID_LOG_INFO,
&&&&ANDROID_LOG_WARN,
&&&&ANDROID_LOG_ERROR,
&&&&ANDROID_LOG_FATAL,
&&&&ANDROID_LOG_SILENT,&&&&&
} android_LogP
另外,这些宏最终都会call到__android_log_print(),也是在system/core/liblog/logd_write.c中:
int&__android_log_print(int&prio,&const&char&*tag,&const&char&*fmt, ...)
&&&&va_list&
&&&&char&buf[LOG_BUF_SIZE];
&&&&va_start(ap, fmt);
&&&&vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
&&&&va_end(ap);
&&&&return&__android_log_write(prio, tag, buf);
先是格式化参数,然后就是调用__android_log_write()函数。这个函数的code如下:
int&__android_log_write(int&prio,&const&char&*tag,&const&char&*msg)
&&&&struct&iovec vec[3];
&&&&log_id_t log_id = LOG_ID_MAIN;
&&&&char&tmp_tag[32];
&&&&if&(!tag)
&&&&&&&&tag =&"";
&&&&if&(!strcmp(tag,&"HTC_RIL") ||
&&&&&&&&!strncmp(tag,&"RIL", 3) ||&
&&&&&&&&!strncmp(tag,&"IMS", 3) ||&
&&&&&&&&!strcmp(tag,&"AT") ||
&&&&&&&&!strcmp(tag,&"GSM") ||
&&&&&&&&!strcmp(tag,&"STK") ||
&&&&&&&&!strcmp(tag,&"CDMA") ||
&&&&&&&&!strcmp(tag,&"PHONE") ||
&&&&&&&&!strcmp(tag,&"SMS")) {
&&&&&&&&&&&&log_id = LOG_ID_RADIO;
&&&&&&&&&&&&
&&&&&&&&&&&&snprintf(tmp_tag,&sizeof(tmp_tag),&"use-Rlog/RLOG-%s", tag);
&&&&&&&&&&&&tag = tmp_
&&&&vec[0].iov_base&& = (unsigned&char&*) &
&&&&vec[0].iov_len&&& = 1;
&&&&vec[1].iov_base&& = (void&*)
&&&&vec[1].iov_len&&& =&strlen(tag) + 1;
&&&&vec[2].iov_base&& = (void&*)
&&&&vec[2].iov_len&&& =&strlen(msg) + 1;
&&&&return&write_to_log(log_id, vec, 3);
这个函数与我们前面看到的__android_log_buf_write()非常相似。所不同的就是这个函数没有log_id参数,因而它默认是输出MAIN log,当log的TAG为某些特殊字串时,则输出RADIO log。最后同样是调用write_to_log这个函数指针来输出log。
我们再来看一个skia里面打log的SkDebugf()函数的实现:
#include &android/log.h&
void&SkDebugf(const&char&format[], ...) {
&&&&va_list&
&&&&va_start(args, format);
&&&&__android_log_vprint(ANDROID_LOG_DEBUG, LOG_TAG, format, args);
&&&&va_end(args);
call到了__android_log_vprint()来输出log,__android_log_vprint()的定义也在system/core/liblog/logd_write.c中:
int&__android_log_vprint(int&prio,&const&char&*tag,&const&char&*fmt,&va_list&ap)
&&&&char&buf[LOG_BUF_SIZE];
&&&&vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
&&&&return&__android_log_write(prio, tag, buf);
一样是__android_log_write()函数。
阅读(...) 评论()

我要回帖

更多关于 2016里番压缩包 的文章

 

随机推荐