自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (4)
  • 收藏
  • 关注

原创 C++ lambda表达式的编译器实现..

现在,Android已经全面转向C++11/14标准了,看代码的话,很多地方变化很大,新标准真的是有点颠覆性的,感觉已经不会C++了。瞅了新标准中的lambda表达式,突然想看一下,这货是怎么实现的,如下,写了个例子,分别调用3个lambda表达式:#include #include //1. 无参数auto hello = [] () {printf( "Hell

2017-02-14 14:45:54 4356

原创 Parcel数据传输过程,简要分析Binder流程

Android Binder框架跨进程传输的,基本都是通过Parcel来封装的数据[注1],这个是十分底层的实现了。对于Framework开发来说,除了了解RPC的抽象意义外,对底层的具体通信细节的实现,也是要比较了解的,这里简单记录一下RPC通信数据传递的过程。1. parcel是啥Parcel主要是方便实现上层抽象对象或数据打包做跨进程传输而封装的一个类,类名的

2017-02-13 21:32:01 8903

转载 Android Binder设计与实现 – 设计篇

这篇文章,最早是在老罗的文章上看到的:http://blog.csdn.net/luoshengyang/article/details/6618363给出的链接http://disanji.net/2011/02/28/android-bnder-design/失效了,不过我这当时保存了一份。这篇文章写的相当不错,最早看的时候,对linux kernel不太熟悉,看的也是云里雾里的,也没

2017-02-08 14:10:07 6317 3

原创 Android各种获取代码调用栈的方法[补]

打印调用栈不用说,基本上每位开发者都会用到,讨论几个方法,以前也说过,http://blog.csdn.net/freshui/article/details/9456889 再次简单整理一下吧,啰嗦就啰嗦了 :)基本分两大类,一类是静态的,要把打印语句插入到代码中,一类是动态的,需要看的时候,查看一下,实时观测各线程调用栈情况。静态方法1. Java中打印调用

2017-01-23 18:21:27 18435 1

原创 Android Native程序crash的一些定位方法简介

Android Native程序crash的一些定位方法简介经常,避免不了,我们的代码会崩溃。如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等存到一个文件中,供调试者使用分析。Core Dump的生成Android的Core dump叫tombstone,墓碑文件。由

2016-12-18 14:37:18 9141 3

原创 Android开机速度优化简单回顾

Android的开机速度,基本上没人说快的,通常移植完系统后,马上要看的事情就是优化开机时间,以下是简单回忆以下以前做优化的那些事。开机时间都花在哪?优化开机时间,通常做的首先是那有有没有BUG,明显不合理的先解决,由于开发阶段稳定性问题,一些地方可能延时加的大,或者频率设的低,先记下来,后面定期还会再看。这些先不看的话,一般拿到机器,我们统计开机时间,主要看如下几个时间段分布:开

2016-12-17 00:23:12 22468 7

原创 android init进程分析 ueventd

ueventd主要是负责设备节点的创建、权限设定等一些列工作。服务通过使用uevent,监控驱动发送的消息,做进一步处理。ueventd实际和init是同一个binary,只是走了不同分支,可参看前一部分。ueventd的整体代码比较简单,主要是三部分: 解析ueventd.rc 初始化设备信息 循环polling uevent消息主函数及相关功能如下如下:int ue

2015-07-07 11:04:53 9626

原创 android init进程分析 init脚本解析和处理

1. 启动动画在执行init启动脚本中到surface flinger启动完成后,开始执行启动动画(bootanimation)之间。(启动动画在cupcake版本还只是surfaceflinger的一个线程,到donut上已经升级到和surface flinger一样的进程了)。启动动画默认是调用函数load_565rle_image在屏幕上显示一个叫 initlogo.rle的一个rgb565格式的图片,一般我们的系统上都没有这张图,可以按下述方法做一个:首先需要准备一张图片,最好是PNG的(andro

2015-07-07 11:03:22 4107

原创 android init进程分析 基本流程

android设备上电,引导程序引导进入boot(通常是uboot),加载initramfs、kernel镜像,启动kernel后,进入用户态程序。第一个用户空间程序是init, PID固定是1.在android系统上,init的代码位于/system/core/init下,基本功能有:管理设备解析并处理启动脚本init.rc实时维护这个init.rc中的服务 init进程的系统初始化

2015-07-07 11:02:10 6319 1

原创 apk自我保护的一种实现方式——运行时自篡改dalvik指令

玩过Android开发的人应该都知道,Android apk的保护是非常差的,Android下的静态分析工具很多,最常用的是利用ApkTool反编译apk,将dalvik字节码生成smali汇编,通过对smali汇编的阅读分析,结合实际软件行为,搜索定位关键信息点,再修改汇编指令,再通过ApkTool重新编译打包签名生成apk来运行,以达到破解的目的。除此ApkTool之外,还有一些工具,如IDA

2014-01-22 17:10:46 13404 6

原创 Android下打印调试堆栈方法

打印堆栈是调试的常用方法,一般出现异常时,我们可以在跑出异常时也将堆栈情况打印出来,这样十分方便错误查找。另外实际上也有一个非常有用的功能:分析代码的行为。android代码太过庞大了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。Android打印堆栈的方法:1. zygote的堆栈dump实际上这个可以同时dump java线程及native线程的堆栈

2013-07-26 10:38:59 106856 18

原创 ubuntu 搭建SVN服务

本文主要参考自http://cssor.com/ubuntu-server-svn.html,多数内容是从其中复制的安装svn及apache服务:sudo apt-get install apache2 libapache2-svn subversion增加svn用户组,用于管理svn,并加入到www-data的apache组:sudo addgroup subve

2013-07-23 11:15:14 8091

原创 android应用程序fps meter[帧数显示]的分析 —— SurfaceFlinger被注入统计代码(3)

上节已经详细说了下注入过程,最后寄生进程在宿主进程中下了个蛋,本节再具体分析注入后的感染过程。一旦系统被root后,普通的应用程序几乎可以做它想做的任何事情,如果能再允许remount系统的只读分区,那可能会有灾难性的危险。

2013-07-11 09:17:53 13729 5

原创 android应用程序fps meter[帧数显示]的分析 —— SurfaceFlinger被注入统计代码 (2)

上一节已经分析应用程序启动后,会通过RootTools库的Shell类,获取root权限并执行/data/data/com.aatt.fpsm/files/0,也就是apk包中的res/raw/bin0这个二进制文件,此二进制文件再通过ptrace系统调用,去绑定到其他进程中,做一些动作。接下来看一下fps meter这个apk到底是做了什么动作。

2013-07-10 09:01:58 7593 2

原创 android应用程序fps meter[帧数显示]的分析 —— SurfaceFlinger被注入统计代码 (1)

fps meter是常用的检测帧率的软件,该软件需要root权限才能工作,一直比较好奇它一个apk是如何知道系统当前的帧率情况的,就针对此apk分析了一下其工作原理。

2013-07-09 13:22:20 13582 2

原创 Android的引用计数(强弱指针)技术及一些问题

Android C++框架层的引用计数技术C++中对指针的使用时很头疼的事情,一个是经常会忘记free 指针,造成内存泄露,另外一个就是野指针问题:访问已经free掉的指针。程序debug工作的相当大部分,都是花费在这。Android中通过引用计数来自动管理指针的生命周期,动态申请的内存将会在不再需要时被自动释放(有点类似Java的垃圾回收),不用程序员明确使用delete来释放对象,也不需要

2013-06-07 18:25:33 8306 4

原创 Android App的启动过程

Native进程的运行过程 一般程序的启动步骤,可以用下图描述。程序由内核加载分析,使用linker链接需要的共享库,然后从c运行库的入口开始执行。 通常,native进程是由shell或者init启动,启动的过程如下:Shell接收到命令,启动一个程序,此时shell首先会fork一个新的进程新fork的进程,通过execve系统调用,陷入到内核中,内核检查和加载需要

2013-03-20 11:29:05 26435 2

原创 jellybean的suspend策略变动

最近查看代码,发现android的suspend策略有变动了在ICS上,当暗屏/亮屏时,会调用powerManagerService的setPowerState,最终会调到 hardware/libhardware_legacy/power/power.c下的set_screen_state,在这个函数中,通过向/sys/power/state中写入 “mem”或"on",让系统进入e

2012-10-31 22:03:22 7533

原创 Android的BUG(五)- Android跨进程使用GraphicBuffer的野指针问题

之前在调试flash 11在ICS上的使用效果时(这个版本使用的是surfaceView,市场上下的,基本上都是用nativeWindow了),发现一个bug,bug的现象如图1所示(访问http://www.qiaqiafood.com,页面主体是一个flash):图1:错误的图片图2:正常的图片Webpage加载时,没有问题,但当将网页上下拖动后,就出现如图1所示的

2012-10-31 14:42:25 7736 1

原创 Jellybean上relro引起的 SEGV_ACCERR段错误问题

在JB上,有时候会发现,以前在ICS上跑的好好的程序,在JB上一运行,就发生 SEGV_ACCERR 问题,比如上一篇文章说到的,HAL模块的HMI中修改dso会造成段错误。出错时的debuggerd输出,大约有如下信息:fault addr 3cde4bf43cde2000-3cde5000 r--p 00050000 b3:01 595 /system/lib/li

2012-10-30 16:30:43 6380

原创 Jelly Bean在硬件上的带起

Jelly Bean的发布已经有几天了,上周我们尝试了下将其在我们的机器上带起,折腾了半天,总算是起来了,不过发现些问题,先总结一下.重编openGL,错误一堆,主要是几个android_native_buffer接口相关的头文件,都找不到了LOG的打印换了,之前的LOGD,LOGE,现在要用ALOGD,ALOGE来输出了之前写的HAL模块,放进去,基本上都会出现段错误,一个都不能运行op

2012-07-24 13:22:33 5528 3

原创 一个Android app的卡死的BUG

做android,免不了要去运行一些跑分程序,常用的跑分程序有quadrant(象限),nbench,安兔兔等。作为系统工程师,对这些跑分程序都非常的不屑,这个只能是一个不客观的参考,但客户都喜欢拿这个比较,于是乎,各家各厂都或多或少会针对此做优化(甚至是作弊或直接的作假),这可不是什么好现象,浮夸的厉害,到处放卫星,亩产万斤的,弄的我们这些老实人都很被动。不过这里就不说这些破事了。国内大家常用的

2012-07-23 15:20:54 16685 10

原创 Android的BUG,一个频繁重启问题

使用过Android的同学,尤其是用过山寨pad,应该对Android的重启问题印象深刻吧。Android由于其设计的复杂性,可能会使得系统在不经意时陷入异常状态,因此Android设计了一套看门狗机制,当检测到问题后,自动重启。再说说我碰到的问题吧,刚带起Android的时候,android的重启问题异常严重,经常操作一会后,界面卡住,等待1分钟左右,重启…, trace大约如下:W/W

2012-06-26 09:06:31 28130 5

原创 SurfaceTexture中的野指针

当初遇到这个bug,是不定期的低概率出现,最后找到一个比较容易重现的步骤:启动系统然后进google +  新建一个帐号(注意是新建一个帐号) 没几步就重启了 这个BUG,一开始追踪也是无头绪的,在这个bug出现时,系统的debuggerd还是有些问题,pt_regs设置的和内核对应不上,tombstone的信息完全无用,core dump功能也是无法使用,唯一的线索就是一点点

2012-06-19 09:49:48 15293 7

原创 HTML 5 播放streaming video造成卡住的问题

这个bug,是google自带的问题。 和见到的诸多android的疑难问题一样,这又是一个可以归类为 多线程同步/状态机 问题。问题处在NuPlayer的异步消息的handle中,现象和原因不细说了,被此BUG纠结的头大的,应该一看就明白。 重现步骤:反复进入、退出html5的流媒体播放 (浏览器的UA设成Ipad模式,去如youku网、百度视频中去播视频),会出现卡死情况

2012-06-18 11:09:22 9765 7

原创 Android应用程序分析——apk的组成

APK是Android  PacKage的缩写,即Android安装包。将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件其实是zip格式,但后缀名被修改为apk,在windows上可以通过winrar等程序直接解压查看。解压apk后,一般的可看到的目录结构如下:文件或目录作用META-INF/也就是一个manifest,从java jar文件引入的描述包信息的目录res/存放资源文件的目录libs/如果存在的话,存放的是ndk编出来的so库AndroidManifest

2011-05-23 21:24:00 4781 1

原创 关于android中使用new Message的内存泄露问题

<br />我们在android上发消息的时候,使用<br />Message msg=new Message()<br />后,发现整夜播放系统提示OOM,程序重启。将new Message()换成<br />Message.obtain();<br />后,内存泄露消失。<br /> <br />查了下android的source code,除了测试代码外,基本上都是使用后者方法,没有用前面的方法,确定是new Message泄露了。<br /> <br />继续追了下源码,终于看到问题了。

2011-05-20 16:26:00 5638 3

转载 Android 反分裂(Anti-fragmentation)策略对处理器架构的影响

文章出处: 与非网最近有媒体刊登了一些关于Android 反分裂(Anti-fragmentation)政策的报道,引发了大家的广泛关注和讨论。各种消息、猜测、误传快速蔓延。那么,Google的Android anti-fragmentation计划真的会对MIPS、Intel、ARM等处理器架构供应商带入冲击吗?是的话其影响又如何呢?Anti-fragmentation真的只意味着Googl

2011-04-19 20:29:00 4083

原创 Port ADW-Launcher到donut版本

<br />项目硬件环境的原因,能顺畅使用的系统还是donut,donut那丑陋的外表,实在不堪入目,而且落后android好几个版本,送给客户,客户也会邹眉头吧 :)<br /> <br />没办法,谁让你内存这么小,cpu这么慢(慢还不说,还是个mips的,android只给arm做了系统,mips什么都要自己搞,没有现成的)。<br /> <br />改头换面,先从launcher做起吧。<br /> <br />网上有不少launcher的apk可下载,但没有源码。<br />搜了下开源的, 有个a

2011-01-09 21:43:00 2780 4

转载 [进程]capget()/capset() -- 获得/设置进程的权能

<br />原型:引用 #undef _POSIX_SOURCE<br />#include <sys/capability.h><br />intcapget(cap_user_header_thdrp,cap_user_data_tdatap);<br />intcapset(cap_user_header_thdrp,constcap_user_data_tdatap);<br /><br />说明:<br />capget() 用来获得进程的权能;capset() 用来设置进程权能。<br /><b

2011-01-05 23:44:00 11312 2

原创 向android 的状态栏中加入快捷按钮(home,back,menu等等)的方法(续)

上一篇文章中谈到的加入快捷按钮的方法,实际上还是太过麻烦。那篇博客是在我刚接触android源代码没几天时,参考网上的介绍自己写着玩呢。实际方法很简单,在statusbar中,添加三个ImageButton即可。以下方法在android 2.1 上编译调试通过1。 准备资源,修改XML文件和上篇文章一样,准备几张图,这里我们准备添加home back和menu图标,就需要准备6张图,三张普通状态,三张按下的高亮状态图标:stat_home.pngstat_home_pressed.pngstat_back.

2010-11-24 22:13:00 9446 3

原创 Android的系统服务一览

Android的系统服务 System_Server进程运行在system server进程中的服务比较多,这是整个android框架的基础 Native服务SurfaceFlinger这是framebuffer合成的服务,将各个应用程序及应用程序中的逻辑窗口图像数据(surface)合成到一个物理窗口中显示(framebuffer)的服务程序 Java服务:这部分的服务大部分都有一个供应用进程使用的manager类,这就是一个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到

2010-11-07 14:10:00 31060 8

转载 Netlink 套接字 -- 内核与用户之间的通讯~~!

<br />原帖地址:<br />http://blog.chinaunix.net/u3/90973/showart_1815538.html<br /> <br /> <br /> <br />Netlink 用于在内核模块与在用户地址空间中的进程之间传递消息的。它包含了用于用户进程的基于标准套接字的接口和用于内核模块的一个内部核心 API。<br />Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Lin

2010-07-26 21:54:00 6294

原创 在android的状态栏(statusbar)中增加menu,home和back快捷键的方法

本文基于donut版本做的由于完全改了status bar,建议先做几张png图片,加到Frameworks/base/core/res/res/drawable下。最好做一张背景图,替换statusbar_background.png另外我又加了几张icon,分别是home menu和back的正常和按下状态。这些图片为:stat_home.pngstat_home_pressed.pngstat_back.pngstat_back_pressed.pngstat_menu.pngstat_menu_pr

2010-07-15 20:43:00 21022 59

转载 【转】Android statusBar添加back,home,menu按钮

在Android界面的系统status bar上添加home,back,menu三个菜单,并完成对应的系统功能。并有higlight效果,修改status bar 高度和status bar上的文字尺寸。这需要修改android sdk才能完成,我用的是eclair.下面就我的操作进行叙述。1.首先完成界面显示效果。需要修改文件./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java,仿照mB

2010-07-01 14:55:00 3801 4

转载 Simple Guide for Porting Android Kernel

<br />作者:刘旭晖 [email protected] 转载请注明出处 <br />http://blog.csdn.net/colorant/ <br /><br />移植Android的kernel到实际的硬件平台上,很多人很早就做过这件事了,不过相关的文档和经验总结不多,我就写一个吧,也为了自己记录一下大致的流程,以后好继续。 <br />1         Android内核Porting相关背景知识 <br />1.1        运行平台 <br />Google的Android平台到今天

2010-06-28 10:48:00 1602

转载 Android build system note

<br />1. Android编译系统分析<br />编译脚本及系统变量<br />build/envsetup.sh脚本分析<br />在编译源代码之前通常需要在android源代码顶层目录执行 . ./build/envsetup.sh 目的是为了使用<br />脚本 envsetup.sh 里面定义了一些函数:<br />function help()<br />function get_abs_build_var()<br />function get_build_var()<br />funct

2010-06-12 09:12:00 1145

转载 android组件间的交互和进程间IPC通信

在Android中窗体与窗体之间如何互相调用和交换数据?窗体(Activity)和后台的服务(Service)如何通信?基于 Unix(Linux)的系统都有一个很优秀的传统,就是倡导非常轻便的进程间通信(IPC)机制;倡导进程通过IPC来互相协作;倡导功能单一,小巧而强壮的进程,而不是又大又复杂的“万金油”。同样,在Android中我们可以将我们的Activity和Service放在不同的进程中运行,我们可以在我们的Task 中加载其他进程的Activity,这些机制都鼓励我们“尽量利用已有的功能,利用I

2010-06-09 11:43:00 1842

转载 Intent用法

直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。

2010-06-08 09:17:00 1273

转载 POSIX 实时信号

有些乱。。。凑合看把0. 可靠信号机制原理:     0.0 当一个信号的出现时, 我们说信号"触发"了.     0.1 我们可以为一个进程指定某个信号相应的 handler.         有三种特殊的handler : SIG_DFL SIG_IGN SIG_ERR 分别代表: 默认, 忽略, 报错 这三种handler         0.2 当进程收到信号并执行完相应 hand

2009-12-04 22:38:00 3726

Android Anatomy and Physiology

android 剖析, 想了解android整体框架的可以看一下

2010-08-18

see mips run~ 英文第二版

seemipsrun 英文第二版, 看书还是看英文版的啊!

2007-10-31

ASIC... the book

搞IC的应该不会不知道这本书吧?<br>

2007-10-31

See Mips Run 中文完全版

中文完全版的see mips run

2007-06-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除