专题一.ppt

Similar documents
¬¬

建模与图形思考

<30312E20B9EFB7C5AF66BEC7A4A4A175A5CDAC7ABE69B3B1A176AABABDD7AA522E706466>

3. 企 业 债 券 : 公 司 债 券 : 5. 证 券 公 司 债 券 : 6. 企 业 短 期 融 资 券 : 7. 中 期 票 据 : 8. 资 产 支 持 证 券 : 9. 国 际 开 发 机 构 人 民 币 债 券 : 10. 中 小 非 金 融 企 业 集 合 票 据 例 题? 判 断


優質居所 攜手共建

<BBB6D3ADB7C3CECABFC6D1A7CEC4BBAFC6C0C2DB>

马 克 思 主 义 学 院 经 济 与 工 商 管 理 学 院 公 共 管 理 学 院 法 学 院 社 会 学 院 外 国 语 学 院 中 国 现 当 代 史 世 界 中 古 史 世 界 近 现 代 史 文 化 遗 产 马 克 思 主 义 哲 学 国 际 政 治 科 学 社 会 主 义 马 克 思

電機工程系認可證照清單 /7/1

一 土 地 市 场 1 土 地 供 应 2016 年 第 19 周 (2016 年 5 月 2 日 2016 年 5 月 8 日 ), 北 京 供 应 土 地 0 宗 2016 年 第 19 周 北 京 房 地 产 市 场 土 地 供 应 一 览 表 地 块 面 积 宗 地 号 / 名 称 交 易

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

大 綱 最 有 利 標 目 的 及 類 型 最 有 利 標 之 辦 理 方 式 準 用 最 有 利 標 取 最 有 利 標 精 神 最 有 利 標 之 類 型 及 其 相 關 規 定 適 用 最 有 利 標 準 用 最 有 利 標 及 取 最 有 利 標 精 神 作 業 程 序 及 實 務 分 析

第一章.FIT)






概述

目 录 1. 概 述 导 航 模 块 主 页 发 现 分 享 消 息 我 核 心 功 能 注 册 / 登 录 注 册... 10

¬¬



Microsoft Word 電腦軟體設計.doc

目 录 欢 迎 使 用 产 品 介 绍 产 品 概 述 产 品 特 点 代 理 商 系 统 使 用 说 明 登 陆 基 本 信 息 分 销 商 管 理 帐 户

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

2002 Shintoukai Chinese Academy. All rights reserved 2

試卷一

untitled

陳偉補習班環境介紹

<33352E20C0B3A5CEB2D5BEC7A7DEB34EB5FBBBF9A4A4C3C4B5C7AC72A9CAAABAACE3A873B669AE692E706466>

<32372E20B077A8EBABE1B7CBA5DEA4A3A650B260ABD7B9EFAA76C0F8AFABB867AEDAABACC056B4D5AF66AABAC0F8AEC4B1B4AFC12E706466>


China Academic Journal Electronic Publishing House. All rights reserved.

China Academic Journal Electronic Publishing House. All rights reserved.


幻灯片 1


劇情大綱 這是有關一對兄妹的故事 不過 所有的情節 必需先從一隻山羊說起 邱興傳 阿傳 在一次部隊的演習中撿到了一隻山羊 沒有烙印記號也 沒人招領 所以退伍時決定把羊帶回家 他攔了一台空的小貨車 央求對方 載他和羊到火車站去 也就在半路上 山羊講話了 山羊說 牠是鬼 卻被一個假裝是鬼的人給騙了 才逼

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1


团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

(➂)11. 炎 炎 夏 日, 即 使 下 起 滂 沱 大 雨, 都 消 除 不 了 令 人 心 煩 的 暑 氣 這 句 話 主 要 想 表 達 什 麼? ➀ 夏 日 裡 經 常 下 著 滂 沱 大 雨, 令 人 心 煩 ➁ 下 著 滂 沱 大 雨 的 日 子, 可 以 消 除 暑 氣 ➂ 夏 日

範本檔

高雄市立五福國民中學九十四學年度第一學期第三次段考二年級本國語文學習領域試題卷

人 物 春 秋 杨 永 泰 将 其 削 藩 策 略 概 括 为 : 以 经 济 方 法 瓦 解 冯 玉 祥 的 第 二 集 团 军, 以 政 治 方 法 解 决 阎 锡 山 的 第 3 集 团 军, 以 军 事 方 法 解 决 李 宗 仁 的 第 四 集 团 军, 以 外 交 方 法 对 付 张 学

台北老爺校外實地參訪結案報告


糖尿病食譜




Microsoft Word 養生與保健_中山大學_講義


萬里社區老人健康照護手冊

Microsoft Word - 強制汽車責任保險承保及理賠作業處理辦法 doc

Microsoft Word - 06.Understanding of Pregnancy and Birth.doc

附 件 一 : 办 理 集 中 式 银 期 转 账 业 务 网 点 名 单 序 号 地 区 网 点 名 称 地 址 联 系 人 电 话 23 工 商 银 行 安 徽 省 铜 陵 百 大 支 行 铜 陵 市 长 江 东 路 50 号 鲁 桂 珍 工 商 银 行 安 徽

2. 二 年 級 吳 毓 秀 老 師 : 感 謝 午 餐 公 司 平 時 均 能 準 時 送 餐, 但 希 望 能 不 要 使 用 加 工 品, 且 學 生 反 映 希 望 能 多 加 蛋 品 的 食 物 3. 三 年 級 柯 阿 青 老 師 : 雞 肉 有 血 水 味, 請 午 餐 公 司 能 調

,,,,,,, (,, ),,,,,,,,,,,,,,, ,,, 4 11,, ( ),,,, ( ), :, ( ),,, 1995, 66 ; ( ),, 1996, , 3-4,,

2002 4,,, 1941,,,,,,,,,,,,,,,,,, : ;:, 1991,

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

Microsoft Word - MIS.doc



untitled

开 发 领 导 小 组 2016 年 3 月 16 日 发 布 实 8 水 利 部 办 公 厅 中 国 农 业 发 展 银 行 办 公 室 关 于 做 好 抵 押 补 充 贷 款 项 目 库 管 理 工 作 的 通 知 ( 水 利 部 中 国 农 业 发 展 银 行 2016 年 3 月 23 日

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复


CC213

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

新 法 评 述 1 关 于 移 动 游 戏 出 版 服 务 管 理 的 通 知 评 述 ( 作 者 : 陈 容 张 艳 冰 ) 2016 年 6 月 2 日, 国 家 新 闻 出 版 广 播 电 影 电 视 总 局 ( 以 下 简 称 广 电 总 局 ) 发 布 关 于 移 动 游 戏 出 版 服

省政协委员陈志实:知识产权市场化须以法治方式推:大奖娱乐官方网站 进

untitled

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Chapter 9: Objects and Classes

<4D F736F F D20BABAC0A4D7A8B5DD20B5DA3635C6DAA3A C4EAB5DA37C6DAA3A9A3A8D6D0CEC4A3A9>

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

0404.doc

“PC通”商业计划书.doc

AL-MX200 Series

专题3:Android技术之JNI和HAL

Microsoft Word - 正文.doc

第3章.doc

,, [8 ] (p. 666),, [8 ] (p. 544), (1643 ), 30,,,,,,,,,,,,,,,,,,,,,,,, [9 ] (),, [8 ] (p. 306),,, [8 ] (p. 1052),, [8 ] (p. 1070),,,,, (1640 ),, [10 ]

第二章.FIT)

untitled

Microsoft Word - 第1章 Android基本概念.docx

RxJava

南京晓庄学院2011年本科教学质量报告

1 目 的 为 维 护 国 内 政 企 市 场 良 好 的 市 场 秩 序, 加 强 对 窜 货 等 重 大 违 规 行 为 的 管 理, 特 在 2016 年 中 兴 通 讯 国 内 政 企 市 场 窜 货 管 理 办 法 基 础 上 制 定 本 管 理 办 法 本 管 理 办 法 适 用 于 中

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..


DAGONG PRESS REVIEW world.people.com.cn

B

Microsoft Word - 12 hhg doc

Transcription:

Android 核心入门分析 Jack.fan Copyright 2007-2008 Farsight. All rights reserved.

主要内容 : } 1 android 系统启动流程分析 } 2 android 系统 JNI 和 Binder 使用简介 } 3 android 系统输入子系统模型分析

1.1 android 系统启动流程分析 : } 1). } init 进程启动控制台进程 } init 进程启动 servicemanager 进程 ( 即 runtime 进程 ) } => 打开 /dev/binder 等, 并设置自己为 runtime(context), 用于对系统中的所有服务进行统一管理 } init 进程启动 vold/debuggerd/rild 进程 } 2). } init 进程启动 Zygote 进程

1.2 android 系统启动流程分析 : } 3). } runtime 进程请求 Zygote 启动 SystemServer 进程 } 4). } SystemServer 进程启动两个本地服务 : SurfaceFlinger/AudioFlinger } SurfaceFlinger/AudioFlinger 向 ServiceManager 注册 } 5). } SystemServer 进程启动其他 Android 服务 ( 如 WindowManager) } 所有的 Android 服务向 ServiceManager 注册

1.3 android 系统启动流程分析 : } android_src/system/core/init.c } parse_config_file("/init.rc") } snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware) } parse_config_file(tmp) } action_for_each_trigger("init", action_add_queue_tail) // 运行脚本文件中的 on init 段 } action_for_each_trigger("early-boot", action_add_queue_tail); } action_for_each_trigger("boot", action_add_queue_tail);

1.4 android 系统启动流程分析 : } init.rc } service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server } frameworks/base/cmds/app_process/app_main.cpp } main() } Step 1 => 解析虚拟机的运行参数 } Step 2 => 解析 dexopt 运行参数 } Step 3 => 初始化 VM 虚拟机 (Initialize the VM) : 这里启 动虚拟机后, 这以后就可以运行 java 代码了 } Step 4 => 初始化 JNI 模块 ( 注册 android 函数 ) : 这以 后,CPP 和 JAVA 代码之间就可以互相函数调用了 } Step 5 => 启动 VM 虚拟机 (Start VM. This thread becomes the main thread of the VM, and will not return until the VM exits)

1.5 android 系统启动流程分析 : } Step 6 => 启动进程 system_server => 该进程会启 动 android 的后续全部进程 } Step 7 => 启动 SurfaceFlinger 和 AudioFlinger } 打开 /dev/pmem 设备 : } 开始 android 机器人开机动画的显示 : } Step 8 => 启动其他的各种服务并将这些服务添加到 ServiceManager 中 : 如 PowerManager,ActivityManager,WindowManager,InputMet hodmanagerservice,... } 这里将启动 android 系统上电后用户看到的第一个锁屏显示界 面 (HomeApp) => 最后 SystemServer::init2 将会调用 ActivityManagerService.systemReady 通过发送 Intent.CATEGORY_HOME intent 来启动第一个 activity 然后开始等待新的 android 应用启动请求 ( 提供 fork() 服务 )

1.6 android 系统启动流程分析 :

1.7 android 系统启动流程分析 :

2.1 android 系统 JNI 和 Binder 使用简介 : } 用于 Java 代码和本地代码 (C/C++) 的互相调用

2.2 android 系统 JNI 和 Binder 使用简介 : } android java 调用 CPP 函数 : 原理 => 相当于 java 的那个 class 里面有的函数使用 CPP 代码来实现了 } 1) 通过结构 JNINativeMethod 描述 java 代码调用函数和 CPP 函数的对应关系 : } typedef struct { } const char* name; // java 代码调用 CPP 函数的入口 } const char* signature; // CPP 函数的返回值 } void* fnptr; // CPP 的函数名 } } JNINativeMethod;

2.3 android 系统 JNI 和 Binder 使用简介 : } => 例如 : java 代码通过 IBinder.transact() 来调用 CPP 的函数 android_os_binderproxy_transact() } {"transact", "(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z", (void*)android_os_binderproxy_transact}, } 2) 将 CPP 函数注册到 java 的某个 class 中 : 使用函数 AndroidRuntime::registerNativeMethods() 来注册 } => 这之后,java 代码就可以调用 CPP 函数了 } 3)java 代码调用 CPP 函数方法 : } IBinder.transact()

2.4 android 系统 JNI 和 Binder 使用简介 : } andorid CPP 调用 java 函数 : 原理 => 相当于 CPP 代码找到 java 的那个 class 里面的函数的入口地址, 然后在 CPP 代码中调用 java 代码 } 1) 通过结构 JNINativeInterface 描述 CPP 代码调用 java 函数的对应关系 : } CallStaticVoidMethod

2.5 android 系统 JNI 和 Binder 使用简介 : } 2) 到 java 的那个 class( 如 android.os.binder) 中找到 java 函数 ( 如 exectransact()) 的入口 : } jclass clazz = env->findclass(kbinderpathname) // const char* const kbinderpathname = "android/os/binder"; } gbinderoffsets.mexectransact = env->getmethodid(clazz, "exectransact", "(IIII)Z") } 3) 在 CPP 代码中调用 java 函数 : } env->callbooleanmethod(mobject, gbinderoffsets.mexectransact, code, (int32_t)&data, (int32_t)reply, flags

3.1 android 输入子系统模型分析 : } Step 1 => WindowManagerService 运行线程 InputDeviceReader 用于读取如下消息 : 按键消息, 触摸屏消息, 轨迹球消息 } Step 2 => WindowManagerService 运行线程 PolicyThread : 结合 PhoneWindowManager.java/KeyguardViewMediator.java 来管理当前窗口显示等 } Step 3 => WindowManagerService 运行线程 InputDispatcherThread : 将线程 InputDeviceReader() 放在事件队列里面的消息分发出去

3.2 android 输入子系统模型分析 : } InputDeviceReader() 运行流程 : } Step 1: 调用底层函数, 从 /dev/input/ 下面的输入设备读入输入事件 } Step 2: 对读入的输入事件作预处理 -> 用于决定是否要分发给系统的其他模块 ( 不分发的输入事件要么自己处理, 要么丢弃, 这需要让 PhoneWindowManager 来决定 ) } Step 3: 将读入的输入事件放到各自对应的事件队列中

3.3 android 输入子系统模型分析 : } 寻找 kl 文件的原理如下 : } 1) 首先寻找 /system/usr/keylayout/gpio-keys.kl => I/EventHub( 698): New keyboard: publicid=65537 device- >id=65537 devname='gpio-keys' propname='hw.keyboards.65537.devname' keylayout='/system/usr/keylayout/qwerty.kl' } 2) 如果没有, 就默认使用 /system/usr/keylayout/qwerty.kl

3.4 android 输入子系统模型分析 : } 从驱动读取到输入事件的信息 : } 然后将 CPP 层读取到的输入事件写入 java 层代码中 : } env->setintfield(event, ginputoffsets.mdeviceid, (jint)deviceid); } env->setintfield(event, ginputoffsets.mtype, (jint)type); } env->setintfield(event, ginputoffsets.mscancode, (jint)scancode); } env->setintfield(event, ginputoffsets.mkeycode, (jint)keycode); } env->setintfield(event, ginputoffsets.mflags, (jint)flags); } env->setintfield(event, ginputoffsets.mvalue, value);

www.farsight.com.cn Thanks!