自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 多重定义之三两事

在几年前,公司有同事问了一个问题.他发现在两个档案中有同名变量的定义,比如在a.c中定义了一个变量x,然后在b.c中发现又定义一个同名的变量x.一般来说,编译程序在编译的时候不是会发生编译错误吗?但是经过编译之后就是没啥事发生,经过后来的逆向分析调查,原因是在b.c中定义的变量x是有加上static关键词,因此编译完之后这个变量x就被冠上local局部的属性,因此就避开了重复定义的编译错误了.然而多重定义的神奇现象还不只这一项,接下来就要在跟各位分享另一现象==弱与强之争==有两段程序如下:/*fo

2021-01-29 10:55:03 366

原创 Binder的异常之分析

Binder的异常之分析在Adroid的世界里,每个程序是互相独立运行的。若要请求协助就需要Binder机制,而此Binder就是一种Client –Server的设计。其中间运行机制不在这里详细描述,间单来讲Binder就是一种程序沟通接口,运用的基本原理就是共享内存加代理模式。因此每个程序是不会知道对方的运作流程,只能知道有求必应这功能。但是若对方一发生异常,虽然使用方无法得知,但也不能置之不理。这篇心得就是要来分析当Server在处理Client端需求发生异常时,Binder是如何来处理。.

2020-12-10 10:28:40 1295

原创 BroadCast 研究分析

最近有些人对android的Broadcast机制颇有兴趣,因此小弟就把自己看到的背后原理跟各位分享.Android的发送广播跟接收机制其实就是一种Publish/subscribepattern, Publish(发布者)只会将不同类型的讯息传送出去,并不会在意subscribe(订阅者),而subscribe(订阅者)只在意想接收的讯息,并不会在意谁是Publish(发布者). 所以Andro

2016-12-23 14:40:56 640

原创 如何在andorid native layer中加log function.

在开发Android一些应用或是链接库, 在程序代码中埋一些log是一定有需要的, 因为谁也无法保证自己所写出来的程序一定没有问题, 而log机制正是用来追踪bug途径的一种常用的方法. 在andorid中提供了logcat的机制来作log的目的, 在javalayer有logcat class可以用,哪在nativelayer呢? 从android platform source code中不难

2014-09-29 11:01:46 1404

原创 Android ART 初始化

从Android 4.4版之后Google就引入ART(Android run time)让使用者多一个执行app的环境选择.在原本的DVM下, android app每次在执行时, 都需要dvm的直译器将byte code转成machine code, 即使在android 2.2之后加入了JIT 功能,在执行上依然还是会有效能的问题. Google为了要解决这个VM需要转译的捆扰问题,便引入了

2014-06-16 14:45:59 1094

原创 Dalvik VM启动流程之间单分析

Android system在Kernel初始化玩就会先启动initprocess, 而在init process之中会去启动Zygoteprocess, Zygote process是Android system中的一个程序产生器. 而在Androidsystem中每一道程序都会需要一个DVM用来执行. 所以Zygoteprocess在一开始就要先初始化Dalvik Virtual Machin

2013-05-20 13:02:52 2010

原创 AndroidInitProcess分析心得(3)

一路跑下来, 我们可以发现终于看到我们想看的command元素了, 原来在每一个act元素中还有一串由act元素所带的comand建立的cmdlinked list, 每一个comand元素会有一个func的functionpointer. 这个function pointer就是由kw_func macro所指定的.//system\core\init\init_parser.c#de

2013-05-08 15:50:52 916

原创 AndroidInitProcess分析心得(2)

//\system\core\init\init_parser.cint lookup_keyword(const char *s){ switch (*s++) { case 'c': if (!strcmp(s, "opy")) return K_copy; if (!strcmp(s, "apability")) return K_capabili

2013-05-08 15:43:50 810

原创 AndroidInitProcess分析心得(1)

众所皆知,Android Init process是Android启动后最先起来的进程. 真正来说Android Init process是由Linux Kernel的启动程序所驱动起来. 从device上电, Bootloader加载Kernel, 然后Kernel接着驱动Android Init process. 这一段属于Linux 的范畴, 其简单的函数呼叫流程如下: kernel

2013-05-08 15:39:22 935

原创 Key event 分发流程研究心得

Android在分发Input event(Key, Motion, Pointer,TrackBall)的流程牵扯到的WindowMangerService,ViewRootImpl和InputDispatcherThread三位角色.这三位角色的工作关系会依以下三个阶段来分析.        1. 起源.    2. 指定接受者.    3. 处理输入事件流程.起源

2013-02-27 19:26:01 1995

原创 Dalvik interpreter 笔记

在任何的virtual matchine都有一个interpreter的架构,DVM也不例外. 到底DVM的interpreter在指令处理上是如何运作的? 以下就作一一的心得记录.顺便提一下, 从Android2.2之后google为了要提升app在DVM上的执行效率,所以在DVM增加了JITcompiler机制. 由于这又是另一个topic. 所以有关于JIT的运作就不在这作心得记录. 日后有

2013-02-08 12:56:36 2093

原创 Android 4.x_Camera新架构分析

起源        Camera 在android framework 设计中是遵循着 Binder 机制所设计的. 详细设计分析在网络上很多高手有在讨论, 在这里只是点出在android4.x 之后, camera 的架构流程有了哪些变化? 在这里就以 Camera的开机流程来做说明.一般要android app要开始使用 camera都会由 android.hardware. Came

2013-01-03 14:52:26 1868

原创 Android 4.2 SetContentView 流程分析(三)

这一路分析下来, 开始进入 JNI layer 了.[android_view_SurfaceSession.cpp]static jint nativeCreate(JNIEnv* env, jclass clazz) { // new 一个 SurfaceComposerClient对象, 其功用后面会在分析. sp client = new SurfaceCompo

2013-01-02 16:41:38 1968

原创 Android 4.2 SetContentView 流程分析(二)

(2)[ActivityThread.java]final void handleResumeActivity(IBinder token, boolean clearHide, boolean isForward, boolean reallyResume) { //1. 藉由所传入的token跟clearHide信息执行Resume state的流程之后取 //得Act

2013-01-02 16:40:29 1397

原创 Android 4.2 SetContentView 流程分析(一)

当呼叫startActivity去启动一个新的Activity, System Server就会经由Socket发送一个请求给Zygote,这个请求带有"android.app.ActivityThread"参数.Zygote就会因为这个请求而fork一个子进程 (假设所启动的activity所属的process还没有被启动过), 这个子进程就是App对应的进程. 此入口函数就是ActivityT

2013-01-02 16:39:15 1642

原创 Android 4.2 Input 流程分析

1. 前言  Android中管理Input的两个主要相关角色, 一是WindowManagerService, 一是跟View相关的ViewRootImpl. 基本原理方向从2.3到目前的4.2都一样,在  Android app一启动之后, ViewRootImpl 就会先跟 WindowManagerService 建立inputChannel, 一旦 WindowManagerServ

2012-12-24 18:54:24 4274

原创 Android DVM 記憶體管理研究分析

Andorid为applayer 所设计的 DalvikVirtual Matchine 真的是包山包海, DVM的功能有, 对象生命周期管理, 行程管理, 内存管理, 安全和例外处理以及跟内存有关的资源回收机制. 里面每一项功能都算是一门大学问, 在这里就针对DVM的内存管理和资源回收机制做分析.分析的重点方向会分为Initial跟Allocate来分析.Initial当DVM作初始化时

2012-12-21 11:20:57 2304

原创 Android Binder 之奇幻國度

话说Android国度中每个行程都各自为政.这些行程大致上分为两族, Server 跟 Application. Server族的阶级比较高, 而Application族的阶级低一级了. 也因为如此Sever族比较接近核心政府OS, Application 若有需要政府的支持, 常就需要透过Server 族来帮忙. 然而, Application跟Server本来就不同族群的人了, 沟通自然成问题

2012-12-21 11:03:18 902

Android 4.2 Input 研究分析

针对Android 4.2的输入流程作一些分析.

2013-06-11

空空如也

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

TA关注的人

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