如何实现一个android的log自动化分析工具
首先,让我们看一看AndroidLog的格式。
下面这段log是以所谓的long格式打印出来的。
从前面Logcat的介绍中可以知道,long格式会把时间,标签等作为单独的一行显示。
[ 12-09 21:39:35.510 396: 416 I/ActivityManager ]Start procnet.coollet.infzmreader:umengService_v1 for servicenet.coollet.infzmreader/com.umeng.message.UmengService:pid=21745 uid=10039 gids={50039, 3003, 1015,1028}[ 12-09 21:39:35.518 21745:21745I/dalvikvm ]Turning on JNI app bug workarounds fortarget SDK version 8...[ 12-09 21:39:35.611 21745:21745D/AgooService ]onCreate()我们以第一行为例:12-09 是日期,21:39:35.510是时间396是进程号,416是线程号;I代表log优先级,ActivityManager是log标签。
在应用开发中,这些信息的作用可能不是很大。
但是在系统开发中,这些都是很重要的辅助信息。
开发工程师分析的log很多都是由测试工程师抓取的,所以可能有些log根本就不是当时出错的log。
如果出现这种情况,无论你怎么分析都不太可能得出正确的结论。
如何能最大限度的避免这种情况呢?笔者就要求测试工程师报bug时必须填上bug发生的时间。
这样结合log里的时间戳信息就能大致判断是否是发生错误时的log。
而且根据测试工程师提供的bug发生时间点,开发工程师可以在长长的log信息中快速的定位错误的位置,缩小分析的范围。
同时我们也要注意,时间信息在log分析中可能被错误的使用。
例如:在分析多线程相关的问题时,我们有时需要根据两段不同线程中log语句执行的先后顺序来判断错误发生的原因,但是我们不能以两段log在log文件中出现的先后做为判断的条件,这是因为在小段时间内两个线程输出log的先后是随机的,log打印的先后顺序并不完全等同于执行的顺序。
那么我们是否能以log的时间戳来判断呢?同样是不可以,因为这个时间戳实际上是系统打印输出log时的时间,并不是调用log函数时的时间。
遇到这种情况唯一的办法是在输出log前,调用系统时间函数获取当时时间,然后再通过log信息打印输出。
这样虽然麻烦一点,但是只有这样取得的时间才是可靠的,才能做为我们判断的依据。
另外一种误用log中时间戳的情况是用它来分析程序的性能。
一个有多年工作经验的工程师拿着他的性能分析结果给笔者看,但是笔者对这份和实际情况相差很远的报告表示怀疑,于是询问这位工程师是如何得出结论的。
他的回答让笔者很惊讶,他计算所采用的数据就是log信息前面的时间戳。
前面我们已经讲过,log前面时间戳和调用log函数的时间并不相同,这是由于系统缓冲log信息引起的,而且这两个时间的时间差并不固定。
所以用log信息前附带的时间戳来计算两段log间代码的性能会有比较大的误差。
正确的方法还是上面提到的:在程序中获取系统时间然后打印输出,利用我们打印的时间来计算所花费的时间。
了解了时间,我们再谈谈进程Id和线程Id,它们也是分析log时很重要的依据。
我们看到的log文件,不同进程的log信息实际上是混杂在一起输出的,这给我们分析log带来了很大的麻烦。
有时即使是一个函数内的两条相邻的log,也会出现不同进程的log交替输出的情况,也就是A进程的第一条log后面跟着的是B进程的第二条log,对于这样的组合如果不细心分析,就很容易得出错误的结论。
这时一定要仔细看log前面的进程Id,把相同Id的log放到一起看。
不同进程的log有这样的问题,不同的线程输出的log当然也存在着相同的问题。
Logcat加上-vthread就能打印出线程Id。
但是有一点也要引起注意,就是Android的线程Id和我们平时所讲的Linux线程Id并不完全等同。
首先,在Android系统中,C++层使用的Linux获取线程Id的函数gettid()是不能得到线程Id的,调用gettid()实际上返回的是进程Id。
作为替代,我们可以调用pthread_self()得到一个唯一的值来标示当前的native线程。
Android也提供了一个函数androidGetThreaId()来获取线程Id,这个函数实际上就是在调用pthread_self函数。
但是在Java层线程Id又是另外一个值,Java层的线程Id是通过调用Thread的getId方法得到的,这个方法的返回值实际上来自Android在每个进程的java层中维护的一个全局变量,所以这个值和C++层所获得的值并不相同。
这也是我们分析log时要注意的问题,如果是Java层线程Id,一般值会比较小,几百左右;如果是C++层的线程,值会比较大。
在前里面的log样本中,就能很容易的看出,第一条log是Jave层输出的log,第二条是native层输出的。
明白了这些,我们在分析log时就不要看见两段log前面的线程Id不相同就得出是两个不同线程log的简单结论,还要注意Jave层和native层的区别,这样才能防止被误导。
AndroidLog的优先级在打印输出时会被转换成V,I,D,W,E等简单的字符标记。
在做系统log分析时,我们很难把一个log文件从头看到尾,都是利用搜索工具来查找出错的标记。
比如搜索“E/”来看看有没有指示错误的log。
所以如果参与系统开发的每个工程师都能遵守Android定义的优先级含义来输出log,这会让我们繁重的log分析工作变得相对轻松些。
Android比较常见的严重问题有两大类...
如何分析Android的Log
首先,让我们看一看AndroidLog的格式。
下面这段log是以所谓的long格式打印出来的。
从前面Logcat的介绍中可以知道,long格式会把时间,标签等作为单独的一行显示。
[ 12-09 21:39:35.510 396: 416 I/ActivityManager ] Start procnet.coollet.infzmreader:umengService_v1 for service net.coollet.infzmreader/com.umeng.message. UmengService:pid=21745 uid=10039 gids={50039, 3003, 1015,1028} [ 12-09 21:39:35.518 21745:21745I/dalvikvm ] Turning on JNI app bug workarounds fortarget SDK version 8... [ 12-09 21:39:35.611 21745:21745D/AgooService ] onCreate() 我们以第一行为例:12-09 是日期,21:39:35.510是时间396是进程号,416是线程号;I代表log优先级,ActivityManager是log标签。
在应用开发中,这些信息的作用可能不是很大。
但是在系统开发中,这些都是很重要的辅助信息。
开发工程师分析的log很多都是由测试工程师抓取的,所以可能有些log根本就不是当时出错的log。
如果出现这种情况,无论你怎么分析都不太可能得出正确的结论。
如何能最大限度的避免这种情况呢?笔者就要求测试工程师报bug时必须填上bug发生的时间。
这样结合log里的时间戳信息就能大致判断是否是发生错误时的log。
而且根据测试工程师提供的bug发生时间点,开发工程师可以在长长的log信息中快速的定位错误的位置,缩小分析的范围。
同时我们也要注意,时间信息在log分析中可能被错误的使用。
例如:在分析多线程相关的问题时,我们有时需要根据两段不同线程中log语句执行的先后顺序来判断错误发生的原因,但是我们不能以两段log在log文件中出现的先后做为判断的条件,这是因为在小段时间内两个线程输出log的先后是随机的,log打印的先后顺序并不完全等同于执行的顺序。
那么我们是否能以log的时间戳来判断呢?同样是不可以,因为这个时间戳实际上是系统打印输出log时的时间,并不是调用log函数时的时间。
遇到这种情况唯一的办法是在输出log前,调用系统时间函数获取当时时间,然后再通过log信息打印输出。
这样虽然麻烦一点,但是只有这样取得的时间才是可靠的,才能做为我们判断的依据。
另外一种误用log中时间戳的情况是用它来分析程序的性能。
一个有多年工作经验的工程师拿着他的性能分析结果给笔者看,但是笔者对这份和实际情况相差很远的报告表示怀疑,于是询问这位工程师是如何得出结论的。
他的回答让笔者很惊讶,他计算所采用的数据就是log信息前面的时间戳。
前面我们已经讲过,log前面时间戳和调用log函数的时间并不相同,这是由于系统缓冲log信息引起的,而且这两个时间的时间差并不固定。
所以用log信息前附带的时间戳来计算两段log间代码的性能会有比较大的误差。
正确的方法还是上面提到的:在程序中获取系统时间然后打印输出,利用我们打印的时间来计算所花费的时间。
了解了时间,我们再谈谈进程Id和线程Id,它们也是分析log时很重要的依据。
我们看到的log文件,不同进程的log信息实际上是混杂在一起输出的,这给我们分析log带来了很大的麻烦。
有时即使是一个函数内的两条相邻的log,也会出现不同进程的log交替输出的情况,也就是A进程的第一条log后面跟着的是B进程的第二条log,对于这样的组合如果不细心分析,就很容易得出错误的结论。
这时一定要仔细看log前面的进程Id,把相同Id的log放到一起看。
不同进程的log有这样的问题,不同的线程输出的log当然也存在着相同的问题。
Logcat加上-vthread就能打印出线程Id。
但是有一点也要引起注意,就是Android的线程Id和我们平时所讲的Linux线程Id并不完全等同。
首先,在Android系统中,C++层使用的Linux获取线程Id的函数gettid()是不能得到线程Id的,调用gettid()实际上返回的是进程Id。
作为替代,我们可以调用pthread_self()得到一个唯一的值来标示当前的native线程。
Android也提供了一个函数androidGetThreaId()来获取线程Id,这个函数实际上就是在调用pthread_self函数。
但是在Java层线程Id又是另外一个值,Java层的线程Id是通过调用Thread的getId方法得到的,这个方法的返回值实际上来自Android在每个进程的java层中维护的一个全局变量,所以这个值和C++层所获得的值并不相同。
这也是我们分析log时要注意的问题,如果是Java层线程Id,一般值会比较小,几百左右;如果是C++层的线程,值会比较大。
在前里面的log样本中,就能很容易的看出,第一条log是Jave层输出的log,第二条是native层输出的。
明白了这些,我们在分析log时就不要看见两段log前面的线程Id不相同就得出是两个不同线程log的简单结论,还要注意Jave层和native层的区别,这样才能防止被误导。
AndroidLog的优先级在打印输出时会被转换成V,I,D,W,E等简单的字符标记。
在做系统log分析时,我们很难把一个log文件从头看到尾,都是利用搜索工具来查找出错的标记。
比如搜索“E/”来看看有没有指示错误的log。
所以如果参与系统开发的每个工程师都能遵守Android定义的优先级含义来输出log,这会让我们繁重的log分析工作变得相对轻松些。
Android比较常见的严重问题...
如何分析Android的Log
首先,让我们看一看AndroidLog的格式。
下面这段log是以所谓的long格式打印出来的。
从前面Logcat的介绍中可以知道,long格式会把时间,标签等作为单独的一行显示。
[ 12-09 21:39:35.510 396: 416 I/ActivityManager ]Start procnet.coollet.infzmreader:umengService_v1 for servicenet.coollet.infzmreader/com.umeng.message.UmengService:pid=21745 uid=10039 gids={50039, 3003, 1015,1028}[ 12-09 21:39:35.518 21745:21745I/dalvikvm ]Turning on JNI app bug workarounds fortarget SDK version 8...[ 12-09 21:39:35.611 21745:21745D/AgooService ]onCreate()我们以第一行为例:12-09 是日期,21:39:35.510是时间396是进程号,416是线程号;I代表log优先级,ActivityManager是log标签。
在应用开发中,这些信息的作用可能不是很大。
但是在系统开发中,这些都是很重要的辅助信息。
开发工程师分析的log很多都是由测试工程师抓取的,所以可能有些log根本就不是当时出错的log。
如果出现这种情况,无论你怎么分析都不太可能得出正确的结论。
如何能最大限度的避免这种情况呢?笔者就要求测试工程师报bug时必须填上bug发生的时间。
这样结合log里的时间戳信息就能大致判断是否是发生错误时的log。
而且根据测试工程师提供的bug发生时间点,开发工程师可以在长长的log信息中快速的定位错误的位置,缩小分析的范围。
同时我们也要注意,时间信息在log分析中可能被错误的使用。
例如:在分析多线程相关的问题时,我们有时需要根据两段不同线程中log语句执行的先后顺序来判断错误发生的原因,但是我们不能以两段log在log文件中出现的先后做为判断的条件,这是因为在小段时间内两个线程输出log的先后是随机的,log打印的先后顺序并不完全等同于执行的顺序。
那么我们是否能以log的时间戳来判断呢?同样是不可以,因为这个时间戳实际上是系统打印输出log时的时间,并不是调用log函数时的时间。
遇到这种情况唯一的办法是在输出log前,调用系统时间函数获取当时时间,然后再通过log信息打印输出。
这样虽然麻烦一点,但是只有这样取得的时间才是可靠的,才能做为我们判断的依据。
另外一种误用log中时间戳的情况是用它来分析程序的性能。
一个有多年工作经验的工程师拿着他的性能分析结果给笔者看,但是笔者对这份和实际情况相差很远的报告表示怀疑,于是询问这位工程师是如何得出结论的。
他的回答让笔者很惊讶,他计算所采用的数据就是log信息前面的时间戳。
前面我们已经讲过,log前面时间戳和调用log函数的时间并不相同,这是由于系统缓冲log信息引起的,而且这两个时间的时间差并不固定。
所以用log信息前附带的时间戳来计算两段log间代码的性能会有比较大的误差。
正确的方法还是上面提到的:在程序中获取系统时间然后打印输出,利用我们打印的时间来计算所花费的时间。
了解了时间,我们再谈谈进程Id和线程Id,它们也是分析log时很重要的依据。
我们看到的log文件,不同进程的log信息实际上是混杂在一起输出的,这给我们分析log带来了很大的麻烦。
有时即使是一个函数内的两条相邻的log,也会出现不同进程的log交替输出的情况,也就是A进程的第一条log后面跟着的是B进程的第二条log,对于这样的组合如果不细心分析,就很容易得出错误的结论。
这时一定要仔细看log前面的进程Id,把相同Id的log放到一起看。
不同进程的log有这样的问题,不同的线程输出的log当然也存在着相同的问题。
Logcat加上-vthread就能打印出线程Id。
但是有一点也要引起注意,就是Android的线程Id和我们平时所讲的Linux线程Id并不完全等同。
首先,在Android系统中,C++层使用的Linux获取线程Id的函数gettid()是不能得到线程Id的,调用gettid()实际上返回的是进程Id。
作为替代,我们可以调用pthread_self()得到一个唯一的值来标示当前的native线程。
Android也提供了一个函数androidGetThreaId()来获取线程Id,这个函数实际上就是在调用pthread_self函数。
但是在Java层线程Id又是另外一个值,Java层的线程Id是通过调用Thread的getId方法得到的,这个方法的返回值实际上来自Android在每个进程的java层中维护的一个全局变量,所以这个值和C++层所获得的值并不相同。
这也是我们分析log时要注意的问题,如果是Java层线程Id,一般值会比较小,几百左右;如果是C++层的线程,值会比较大。
在前里面的log样本中,就能很容易的看出,第一条log是Jave层输出的log,第二条是native层输出的。
明白了这些,我们在分析log时就不要看见两段log前面的线程Id不相同就得出是两个不同线程log的简单结论,还要注意Jave层和native层的区别,这样才能防止被误导。
AndroidLog的优先级在打印输出时会被转换成V,I,D,W,E等简单的字符标记。
在做系统log分析时,我们很难把一个log文件从头看到尾,都是利用搜索工具来查找出错的标记。
比如搜索“E/”来看看有没有指示错误的log。
所以如果参与系统开发的每个工程师都能遵守Android定义的优先级含义来输出log,这会让我们繁重的log分析工作变得相对轻松些。
Android比较常见的严重问题有两大类...
android软件测试log知多少
log.i是打印输出日志的,这个函数在项目中的主要作用就是,你能够查看你想要知道的一些参数数据,而且可以帮你找到程序的运行出错的位置。
1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("",""); 2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择. 3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息 4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。
...
什么样的IISLOG分析软件比较好,希望是为IIS专门定制的,有?
Web Log Explorer Pro下载介绍: Web Log Explorer 可以统计分析 Apache、IIS 网站主机的 .log 纪录文件,能够将多种关于网站浏览者的统计资料彻底解析,包括:参观人次、动态状况、文件存取状态、参照网页、搜寻引擎、错误、来访者国家、网站搜寻字符串/词组等等。
好像是个破解版,祝你好运。
为什么在 Android 上启动知乎 app 时会唤醒微信
本回答信息来自针对微信Android客户端以及知乎Android客户端的分析。
我手机上装了一键清理的软件,平时从来不让微信在后台运行,但是每当打开知乎,不出三秒,微信消息就来了,消息并不固定,只是感觉微信被打开了,我在想知乎是不是跟微信合作,后台打开微信,然后以此来赚钱的呢?首先针对题主的疑问,准备的回答:不是实际的情况是,知乎调用微信sdk中分享的相关接口,微信sdk的相关接口里面,给微信发送了一个广播,微信app就被唤醒了,这不是知乎的主观行为,而是微信的(而且结合实际的分析来看,这个应该也算是正常的功能)。
以下是详细分析:1 首先说一下app的被唤醒(自启动)机制。
app自启动,基本上都是依靠Android的广播来实现的,而且是静态注册的广播(在AndroidManifest.xml文件中进行配置的广播),发送广播的方法在一般情况下是sendBroadcast。
2 按照惯例,反编译一下微信apk,然后搜索一下它能够由哪些静态广播进行唤醒,同时抓取广播相关的log。
结合微信的AndroidManifest.xml文件以及抓取的log,可以知道相关的BroadcastReceiver是EntryReceiver,相关的action 为com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTERcom.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER从其名称上看,是和注册/注销相关,具体接收到广播之后做了哪些处理,这些就不赘述了。
I/ActivityManager( 1107): Start proc com.tencent.mm for broadcast com.tencent.mm/.plugin.base.stub.WXEntryActivity$EntryReceiver: pid=28779 uid=10131 gids={50131, 3003, 1028, 1015, 3002, 3001} 3 接下来分析知乎的代码搜索一下知乎反编译之后的smali文件(sendBroadcast),其中只有一条是和微信相关的zhihu_2.0.3_176/smali/com/tencent/mm/sdk/openapi/j.smali: invoke-virtual {v0, v4, v1}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V再看一下反编译的java文件,能够比较清楚的看到,就是利用com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER这个action来进行注册,检查一些必要的信息。
根据这些信息,结合微信和知乎反编译之后的文件,已经可以完整的分析具体发生了哪些事情了。
com.tencent.mm.sdk.openapi.jpublic final boolean a(String paramString) { if (!b("com.tencent.mm")) { com.tencent.mm.sdk.platformtools.a.a("MicroMsg.SDK.WXApiImplV10", "register app failed for wechat app signature check failed"); return false; } this.b = paramString; com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.WXApiImplV10", "register app " + this.a.getPackageName()); Context localContext = this.a; String str1 = "weixin://registerapp?appid=" + this.b; String str2 = "com.tencent.mm" + ".permission.MM_MESSAGE"; Intent localIntent = new Intent("com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER"); String str3 = localContext.getPackageName(); localIntent.putExtra("_mmessage_sdkVersion", 553910273); localIntent.putExtra("_mmessage_appPackage", str3); localIntent.putExtra("_mmessage_content", str1); localIntent.putExtra("_mmessage_checksum", b.a(str1, str3)); localContext.sendBroadcast(localIntent, str2); com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.MMessage", "send mm message, intent=" + localIntent + ", perm=" + str2); return true; }4 最后,因为偷懒,所以我只是大概的静态分析了相关代码,没发现知乎和微信做了什么丧失的事情,然后大概加了段log check了一下,从中也可以看出的确是和分享有关,至于使用时机及频率是否合适,这个和问题没什么关系,不做讨论。
D/hillwind( 5766): java.lang.ThrowableD/hillwind( 5766): at com.hillwind.android.util.RLog.printStackTrace(RLog.java:11)D/hillwind( 5766): at com.tencent.mm.sdk.openapi.j.a(Unknown Source)D/hillwind( 5766): at com.zhihu.android.util.af.b(WeChatHelper.java:43)D/hillwind( 5766): at com.zhihu.android.widget.a.b(ActivityChooserModel.java:721)D/hillwind( 5766): at com.zhihu.android.widget.ShareActionProvider.setShareIntent(ShareActionProvider.java:98)D/hillwind( 5766): at com.zhihu.android.ui.fragment.bx.a(QuestionViewerFragment.java:221)D/hillwind( 5766): at android.support.v4.app.j.a(FragmentManager.java:1973)D/hillwind( 5766): at android.support.v4.app.g.onCreatePan...
开发的android应用程序在手机上运行显示很抱歉已停止运行是怎么回...
Android代码问题,造成抛出了异常,没有处理,所以程序直接闪退。
Android开发中,所的有输出都在logcat中 包含System.out输出和printStackTrace()输出都在Logcat中,Android开发,建议使用android提供的Log工具类来打印信息。
找到Logcat视图的方式:1. Eclipse 点击 Window2. Show View会出来一个对话框3. 点击Ok按钮时,会在控制台窗口出现LogCat视窗android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。
根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。
1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要认真的分析,查看栈的信息了。
Android系统的系统日志有哪几个文件,这些文件中包含什么内容?
主要看是高通还是MTK了。
不过大致相当,只是log文件名称不一样而已手机的android log(包含 main_log、events_log、kernel_log),mainlog记录手机android上层app以及framework相关活动的log,比如你写的app打印的log,就在这里面;eventslog则主要是ActivityManager、powerManager等相关的log;Kernellog则主要是驱动相关的log。
Modem log,主要是通话相关的,比如信号强弱、连接那个网络等等还有网络相关的netlog,看网络链接情况,抓取网络包等等主要是以上这三个,其它还有data/anr 目录下的traces/tombstones等等,分析死机、重启还是很重要的。
看应用申请什么权限,就看mainlog就行,但是不一定有,因为一般手机log不会放开。
你可以在终端里键入命令查看其申请了什么权限: adb shell dumpsys package ,或者反编译其apk,查看其AndroidManifest.xml文件。
谢谢!
深入解析android 5.0系统书怎么样
编辑推荐 基于最新的Android 5.0版本分析 随书赠送“极客学院”2个月全部课程免费VIP学习卡(获取方式见本书封底) 小米电视系统软件部总监、原Motorola软件总监、德信无线软件部经理等专家鼎力推荐 全面细致讲解了系统调用、内存管理、管道、线程管理、同步机制、Log模块、Binder驱动、同步和消息机制、Init进程、Zygote进程、资源管理、应用管理、组件管理、管理进程、图形显示系统、窗口系统、输入管理系统、电源管理、存储系统、网络系统、音频系统、SELinux模块、最新ART虚拟机、垃圾回收、Recovery模块、内存泄露等核心模块在Android系统中的原理。
书中尽可能详细地给出了主要模块的架构、原理和主干实现,很多模块前后能相互印证用以帮助读者学习,希望通过本书帮助读者快速理解内核的设计思想、获得对Android系统进行二次开发的能力。
内容简介 书籍 计算机书籍 《深入解析Android 5.0系统》详细剖析了最新Android 5.0 系统主要框架的原理和具体实现。
本书共24章,覆盖了Android 5.0 系统中、下层重要的模块,对于每个模块都详细介绍了它们的架构、原理及代码实现等各个方面,尽量让读者知其然,又知其所以然,达到学以致用的目的。
主要内容为:Android Build系统核心、Android的Bionic、系统调用的实现方法、Android的Binder、Binder应用层的核心类、Android 的JNI、Android的同步和消息机制、进程间的消息传递、Android的Init进程、Android的Zygote进程、Android的资源管理、Android的SystemServer进程、Android的应用管理、Android的组件管理、Android的多用户模式、Android的图形显示系统、Android的窗口系统、Android 的输入管理、Android的电源管理、Android的存储系统、Android的网络管理框架、Android的音频系统、Android的SELinux模块、Dalvik和ART虚拟机、Android的Recovery模块、Android的调试方法、内存泄露的分析、Android的自动化测试等系统的核心知识。
在书中尽可能详细地给出了代码的注释、各种属性和常量的解释,以及各种系统中使用的文件格式的介绍,希望读者能通过本书,获得对Android 5.0系统进行二次开发的能力,本书是进行系统开发人员的案头必备书。
《深入解析Android 5.0系统》面向的读者主要是进行系统开发的工程师,包括应用开发工程师、ROM开发工程师和各种使用Android作为开发平台的TV和可穿戴式设备(Wear)的开发工程师。
本书也可以作为大专院校相关专业师生的学习用书及培训学校教材。
作译者 刘超,资深Android专家,系统架构师。
曾任职于四通利方,Motorola,小米TV等多家著名公司。
国内最早的Android系统开发者之一,研究Android内核多年。
主持研发过天语W606,酷派W711,华为T8301等多款Android手机。
目录 第1章 建立Android系统开发环境 11.1 安装操作系统 11.1.1 安装方式的选择 11.1.2 下载和安装Ubuntu 11.1.3 使用Ubuntu遇到的问题 21.2 安装开发包 31.2.1 安装JDK 1.6 31.2.2 安装OpenJDK 1.7 41.2.3 安装编译需要的开发包 41.3 安装一些有用的工具 41.3.1 安装Android SDK 41.3.2 安装Android Studio 41.3.3 安装Source Insight 51.3.4 安装比较工具Meld 51.4 下载源码 51.4.1 Git and Repo简介 51.4.2 源码版本历史 61.4.3 下载Android源码 71.4.4 下载Kernel源码 8 第2章 Android的编译环境—— ↓展开全部内容 媒体评论 这本书介绍Android系统的翔实和认真程度可能在市面上无出其右。
从JNI/Boinic到Loop/Init,从SystemServer到Provider,从包管理到图形系统,从窗口系统到输入管理,从电源管理到睡眠唤醒机制,从网络管理到音视频系统,甚至从Vold到Recovery,从虚拟机到自动化测试,本书都有详细解释和说明。
作为一个工作十多年的资深工程师,作为一个从Android 1.0版本开始接触Android系统的工程师,作为一个量产过多款产品的Android一线架构师,我想没有这样的经历是很难将这本书写得如此详尽。
希望读者可以从中得到有益的启发,开启自己完美的Android开发之旅! ---小米电视系统软件部总监,茹忆 这是一本有6年安卓系统开发经验的、中国顶级Android系统工程师的心血之作! 这是一本可以推荐给任何从事Android系统开发或应用开发工程师看的书! ---原Motorola软件总监,播思通讯CTO,饶宏 一本非常优秀的、介绍Android内部机制的书,详细地分析了Android系统的大部分模块,值得每一个希望深入学习Android系统的工程师拥有。
——德信无线软件部经理 ,陈行星
转载请注明出处51数据库 » android log分析软件