Android
文章平均质量分 87
freshui
学习 再学习 :)
展开
-
Simple Guide for Porting Android Kernel
<br />作者:刘旭晖 colorant@163.com 转载请注明出处 <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 · 1609 阅读 · 0 评论 -
Intent用法
直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。转载 2010-06-08 09:17:00 · 1283 阅读 · 0 评论 -
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 · 6383 阅读 · 1 评论 -
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 · 4132 阅读 · 0 评论 -
android init进程分析 ueventd
ueventd主要是负责设备节点的创建、权限设定等一些列工作。服务通过使用uevent,监控驱动发送的消息,做进一步处理。ueventd实际和init是同一个binary,只是走了不同分支,可参看前一部分。ueventd的整体代码比较简单,主要是三部分: 解析ueventd.rc 初始化设备信息 循环polling uevent消息主函数及相关功能如下如下:int ue原创 2015-07-07 11:04:53 · 9695 阅读 · 0 评论 -
一个Android app的卡死的BUG
做android,免不了要去运行一些跑分程序,常用的跑分程序有quadrant(象限),nbench,安兔兔等。作为系统工程师,对这些跑分程序都非常的不屑,这个只能是一个不客观的参考,但客户都喜欢拿这个比较,于是乎,各家各厂都或多或少会针对此做优化(甚至是作弊或直接的作假),这可不是什么好现象,浮夸的厉害,到处放卫星,亩产万斤的,弄的我们这些老实人都很被动。不过这里就不说这些破事了。国内大家常用的原创 2012-07-23 15:20:54 · 16747 阅读 · 10 评论 -
Android的BUG,一个频繁重启问题
使用过Android的同学,尤其是用过山寨pad,应该对Android的重启问题印象深刻吧。Android由于其设计的复杂性,可能会使得系统在不经意时陷入异常状态,因此Android设计了一套看门狗机制,当检测到问题后,自动重启。再说说我碰到的问题吧,刚带起Android的时候,android的重启问题异常严重,经常操作一会后,界面卡住,等待1分钟左右,重启…, trace大约如下:W/W原创 2012-06-26 09:06:31 · 28224 阅读 · 5 评论 -
SurfaceTexture中的野指针
当初遇到这个bug,是不定期的低概率出现,最后找到一个比较容易重现的步骤:启动系统然后进google + 新建一个帐号(注意是新建一个帐号) 没几步就重启了 这个BUG,一开始追踪也是无头绪的,在这个bug出现时,系统的debuggerd还是有些问题,pt_regs设置的和内核对应不上,tombstone的信息完全无用,core dump功能也是无法使用,唯一的线索就是一点点原创 2012-06-19 09:49:48 · 15336 阅读 · 7 评论 -
HTML 5 播放streaming video造成卡住的问题
这个bug,是google自带的问题。 和见到的诸多android的疑难问题一样,这又是一个可以归类为 多线程同步/状态机 问题。问题处在NuPlayer的异步消息的handle中,现象和原因不细说了,被此BUG纠结的头大的,应该一看就明白。 重现步骤:反复进入、退出html5的流媒体播放 (浏览器的UA设成Ipad模式,去如youku网、百度视频中去播视频),会出现卡死情况原创 2012-06-18 11:09:22 · 9874 阅读 · 7 评论 -
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 · 7642 阅读 · 2 评论 -
android应用程序fps meter[帧数显示]的分析 —— SurfaceFlinger被注入统计代码(3)
上节已经详细说了下注入过程,最后寄生进程在宿主进程中下了个蛋,本节再具体分析注入后的感染过程。一旦系统被root后,普通的应用程序几乎可以做它想做的任何事情,如果能再允许remount系统的只读分区,那可能会有灾难性的危险。原创 2013-07-11 09:17:53 · 13815 阅读 · 5 评论 -
android应用程序fps meter[帧数显示]的分析 —— SurfaceFlinger被注入统计代码 (1)
fps meter是常用的检测帧率的软件,该软件需要root权限才能工作,一直比较好奇它一个apk是如何知道系统当前的帧率情况的,就针对此apk分析了一下其工作原理。原创 2013-07-09 13:22:20 · 13654 阅读 · 2 评论 -
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 · 6377 阅读 · 3 评论 -
apk自我保护的一种实现方式——运行时自篡改dalvik指令
玩过Android开发的人应该都知道,Android apk的保护是非常差的,Android下的静态分析工具很多,最常用的是利用ApkTool反编译apk,将dalvik字节码生成smali汇编,通过对smali汇编的阅读分析,结合实际软件行为,搜索定位关键信息点,再修改汇编指令,再通过ApkTool重新编译打包签名生成apk来运行,以达到破解的目的。除此ApkTool之外,还有一些工具,如IDA原创 2014-01-22 17:10:46 · 13425 阅读 · 6 评论 -
Android下打印调试堆栈方法
打印堆栈是调试的常用方法,一般出现异常时,我们可以在跑出异常时也将堆栈情况打印出来,这样十分方便错误查找。另外实际上也有一个非常有用的功能:分析代码的行为。android代码太过庞大了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。Android打印堆栈的方法:1. zygote的堆栈dump实际上这个可以同时dump java线程及native线程的堆栈原创 2013-07-26 10:38:59 · 107129 阅读 · 18 评论 -
Android的引用计数(强弱指针)技术及一些问题
Android C++框架层的引用计数技术C++中对指针的使用时很头疼的事情,一个是经常会忘记free 指针,造成内存泄露,另外一个就是野指针问题:访问已经free掉的指针。程序debug工作的相当大部分,都是花费在这。Android中通过引用计数来自动管理指针的生命周期,动态申请的内存将会在不再需要时被自动释放(有点类似Java的垃圾回收),不用程序员明确使用delete来释放对象,也不需要原创 2013-06-07 18:25:33 · 8337 阅读 · 4 评论 -
Android App的启动过程
Native进程的运行过程 一般程序的启动步骤,可以用下图描述。程序由内核加载分析,使用linker链接需要的共享库,然后从c运行库的入口开始执行。 通常,native进程是由shell或者init启动,启动的过程如下:Shell接收到命令,启动一个程序,此时shell首先会fork一个新的进程新fork的进程,通过execve系统调用,陷入到内核中,内核检查和加载需要原创 2013-03-20 11:29:05 · 26527 阅读 · 2 评论 -
【转】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 · 3844 阅读 · 4 评论 -
在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 · 21082 阅读 · 59 评论 -
android组件间的交互和进程间IPC通信
在Android中窗体与窗体之间如何互相调用和交换数据?窗体(Activity)和后台的服务(Service)如何通信?基于 Unix(Linux)的系统都有一个很优秀的传统,就是倡导非常轻便的进程间通信(IPC)机制;倡导进程通过IPC来互相协作;倡导功能单一,小巧而强壮的进程,而不是又大又复杂的“万金油”。同样,在Android中我们可以将我们的Activity和Service放在不同的进程中运行,我们可以在我们的Task 中加载其他进程的Activity,这些机制都鼓励我们“尽量利用已有的功能,利用I转载 2010-06-09 11:43:00 · 1861 阅读 · 0 评论 -
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 · 1157 阅读 · 0 评论 -
Android的系统服务一览
Android的系统服务 System_Server进程运行在system server进程中的服务比较多,这是整个android框架的基础 Native服务SurfaceFlinger这是framebuffer合成的服务,将各个应用程序及应用程序中的逻辑窗口图像数据(surface)合成到一个物理窗口中显示(framebuffer)的服务程序 Java服务:这部分的服务大部分都有一个供应用进程使用的manager类,这就是一个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到原创 2010-11-07 14:10:00 · 31261 阅读 · 8 评论 -
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 · 2795 阅读 · 4 评论 -
向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 · 9543 阅读 · 3 评论 -
关于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 · 5676 阅读 · 3 评论 -
Jelly Bean在硬件上的带起
Jelly Bean的发布已经有几天了,上周我们尝试了下将其在我们的机器上带起,折腾了半天,总算是起来了,不过发现些问题,先总结一下.重编openGL,错误一堆,主要是几个android_native_buffer接口相关的头文件,都找不到了LOG的打印换了,之前的LOGD,LOGE,现在要用ALOGD,ALOGE来输出了之前写的HAL模块,放进去,基本上都会出现段错误,一个都不能运行op原创 2012-07-24 13:22:33 · 5541 阅读 · 3 评论 -
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 · 6405 阅读 · 0 评论 -
Android 反分裂(Anti-fragmentation)策略对处理器架构的影响
文章出处: 与非网最近有媒体刊登了一些关于Android 反分裂(Anti-fragmentation)政策的报道,引发了大家的广泛关注和讨论。各种消息、猜测、误传快速蔓延。那么,Google的Android anti-fragmentation计划真的会对MIPS、Intel、ARM等处理器架构供应商带入冲击吗?是的话其影响又如何呢?Anti-fragmentation真的只意味着Googl转载 2011-04-19 20:29:00 · 4138 阅读 · 0 评论 -
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 · 7566 阅读 · 0 评论 -
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 · 7756 阅读 · 1 评论 -
Parcel数据传输过程,简要分析Binder流程
Android Binder框架跨进程传输的,基本都是通过Parcel来封装的数据[注1],这个是十分底层的实现了。对于Framework开发来说,除了了解RPC的抽象意义外,对底层的具体通信细节的实现,也是要比较了解的,这里简单记录一下RPC通信数据传递的过程。1. parcel是啥Parcel主要是方便实现上层抽象对象或数据打包做跨进程传输而封装的一个类,类名的原创 2017-02-13 21:32:01 · 9092 阅读 · 1 评论