开发者社区> TravelGrid> 正文

Android源码剖析之Framwork层后记篇(硬件消息传递、apk管理、输入法框架、编译过程)

简介:  本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 既然写到后记篇,就代表本系列到此为止,暂时告一段落;其他一些Manager随后有时间再补,就像源码的一些翻译一样,有时间总会补上的,同时也希望大家一如既往的喜欢,直言不讳的提出宝贵意见。
+关注继续查看


 本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


既然写到后记篇,就代表本系列到此为止,暂时告一段落;其他一些Manager随后有时间再补,就像源码的一些翻译一样,有时间总会补上的,同时也希望大家一如既往的喜欢,直言不讳的提出宝贵意见。

后记将讲述输入模块和编译系统内容,以及对整个系统的总结。

一言不合就来图,且看下图,有关硬件消息传递-以下是消息在硬件中处理后如何传递到Window层的过程


硬件的消息,由触屏和按键触发,通过驱动处理,形成Up、Down、Move这样的事件,然后再把消息分发到KeyQ类中,

由InputDispatcher读取后发给用户,API层处理消息形成长按、点击、轻触等系统定义事件,到底是Window层先处理还是View层

先处理,这由手机原始设计决定,除特殊配置按键外,均由View层处理,然后到ViewGoup,到Activity,这样传递出来。

有关资源访问:

data/app:apk被复制后的目录,系统应用放在system/app目录下

data/dalvik-cache:class.dex的存放目录或odex

data/data:数据安装的路径

attr用来设置一些视图的属性

资源的访问可以通过context或packageManager的方法实现(id小于0x1000,0000是系统资源,大于0x7000,0000的是应用资源,

而更换系统主题也可以使用这招,判断获取的资源是01开头,则返回07开关的;同样可以替换AssetManager的路径,通过修改

framework-res.apk实现,不建议使用)

String OrginalName=getResourceEntryName(orginalId);

int newId=getIdentifier(OrginalName,……);

String newName=getString(newId);


程序包管理:包含三块,提供具体组件的intent,进行权限检查,提供安装删除的癌

PMS和其他Manager一样,运行在SystemServer进程中,使用/system/etc/permissions管理系统和应用权限和platform.xml管理应用的pid和uid,使用/data/system/packages.xml保存安装包基本信息:名字、路径、权限等,使用DefaultContainerService将apk复制到data/app目录下,使用Installer服务(localSocket)将文件解压出来、创建数据目录,data/dalvik-cache和data/data

应用程序的权限有四种,默认为普通,危险会提示,签名要一致,系统指系统签名才可以;证书指meta-inf下默认文件,可指定可多个,首个需要key值为2390个16进制值来自证书;签名一个应用只能有一个,可包含多个证书;shared-user指定共享用户id对应的签名和权限

platform包含group标签(应用群组)、permission标签、assign-permission标签(将权限加入系统,用于群组)、library标签(依赖文件)、feature标签(wifi camear location sensor bluetooth touchscreen); 提取dex过程包含,解析platform.xl、验证签名到保存data/dalvik-cache中,最后提取Service、Receiver、Activity、Broadcast等;安装过程包含检查package.xml是否存在,然后读取mSettings.mPackages,决定是否创建package.xml,加入并生成新的package.list,由handlerParams下两个InstallParams和MoveParams完成。

软件的安装和删除,基本上应用层也做不了什么,因此也不再画图和详细介绍,仅仅讲一些知识点。安装使用PackageManger的installPackage方法卸载deletePackage方法,当然后续都是异步执行的,检查权限、删除目录和缓存、发出广播、终止进程,完。packageURI是安装路径,系统安装可以用adb push放置apk到system/app目录下,而一般应用只能用adb install 安装到data/app目录下。

关于如何启动四大组件,应用被安装后,这些组件的intent-filter均被放入ContentResolver,通过intent的query方法找到一一对应的组件。

输入法框架-Input Method Framework

输入法有效贯彻Jni的使用原则,由服务端和客户端两块组成,即保证安全性又保证流畅性,详见: Android高级第十讲之AIDL与JNI

IMF的核心思想类似:使用Service后台进程的方式运行和窗口创建,将监听到的输入内容传递到编辑框。

咱们从以下几个重要组件说起:

IMF:Input Method Framework 输入法框架

IM:Input Method 具体输入法

IMS:Input Method Service 具体输入法服务。记录输入法是否添加、输入区是否显示、当前窗口显示状态等具体事宜

IMM:Input Method Manager 具体输入法管理实例。包含两个Binder,一个将按键消息发给编辑框,一个用于IMMS访问客户

进程、管理IM的显示和隐藏。记录输入法的名字、是否已经启动、当前服务窗口

IMMS:Input Method Manager Service 具体输入法管理服务:记录IMM对象、焦点窗口、连接两者的Binder

IME:Input Method Engine 具体输入法引擎(泛指以上内容)

Binder对象对应的类如下:

InputConnection:接口,定义编辑框需提供的函数,被IM通过Binder调用

IInputMethodClient:aidl,Binder本地代理,指向IMMS接口,以便向客户端传递与输入法相关的信息

InputMethodSession:接口,定义IMM直接访问IM的接口

InputMethod:输入法提供的API接口 如何交互、传递参数、解析数据

输入法操作分三块:启动、显示和切换,启动指IMS(两个服务Binder,一个IMS创建,一个客户端创建,分别用于和对方

交互),显示指与客户端交互(将焦点从Wms那里拿过来、调用IMM的showSoftInput、调用IMM的windowGainedFocus-位置

固定显示在编辑框下面),切换不言而喻(不同输入法即apk,通过setting设置)

如何自定义输入法?-厂商可自定义的三个Binder

IInputContext:编辑框的Binder对象,不能自定义但可以重写onCreateInputConnection来返回自定义的InputConnection窗口,

用于读取、插入和替换字符,以及添加和删除字符

IInputMethod:IMS的Service启动后返回的Binder,被IMMS调用,用于直接与输入法交互

IInputMethodSession:IMMS请求IMS创建的Binder,用于客户端调用

KeyBoard.java用于将按键位置转换成键值,再由IMS转化成相应的提示字符,输入法是一个新窗口或者叫系统窗口,区别于

Activity的应用窗口。

Rom编译知识:

.mk文件和各种shell脚本共同定义编译框架,基于make概念;几年前用cygwin做完一些so库的编译,非常麻烦,可能没做过C

开发的原因,写一些“.h”、“.c”文件,定义c与java交互原则,最终被放弃了。

源文件包括:资源、aidl源、java源、java静态库、Java共享库,使用aapt命令将资源文件编译成.二进制,再通过dx工具将

jar打成dex文件;关于签名,是用来认证的,而且可被多次签名;zipalign优化Apk内部存储,对内部数据进行边界对齐。

Framework包含的重要文件

framework.jar:.java变.class,最终变dex的文件-系统apk,可以不用;包含android.jar

core.jar:Java库文件

ext.jar:扩展类库

framework-res.apk:需要使用的各种资源

上面有讲资源01开头的是Framework资源,07是应用资源,而02指 非应用资源。01-attr资源,02-drawable资源,

03-layout资源,04-string资源,使用public.xml记录id与资源对应关系

Rom有两种,linux内核和Android所需的;Cpu包含地址总线和数据总线,前者用于输出CPU访问的地址信息,后者用于传输

CPU要读写的数据;CPU采用ARM内核,地址总线32位,支持最大存储空间4G:

SRam:最早期异步存储器,512kb、1M的映射存储

Nand Flash:U盘,SD卡,一般仅需4个地址就能支持16G数据映射,因为它有二次引导内存

SDRam:同步RAM,访问速度快,仅比SRAM好一点

外设地址:显示器、键盘等,PC分南桥(低速器件)和北桥(高速器件)、中内存这样三组总线,而嵌入式仅使用一组总线,这是由

CPU运行速度和特别支持决定,CPU上会有一小段引导程序无法改变

一般NAND支持的二次引导内存在2M以内,存储在NAND设备中,不能格式为FAT32(否则失效),可以识别以太网口,具备

USB接口驱动,使用fastboot,读取Ext分区中的update.zip,这也是通过USB连接PC完成的,也是为什么系统更新包只能放在SD卡

中而不能放入内存卡中的原因,其中的内存卡映射路径:

boot:linux内核,空间为8M

recovery:保存boot原始数据,也是8M,相当于boot原始复制品

Radio:无线通讯模块,程序处理器提供给用户界面,基带处理器提供底层无线通讯;多媒体处理器完成音视频解码

system:内核,各种所需驱动库、应用程序,大小约500M

data:应用程序所需或解压出的文件,约1G

sdcard:外置内存卡

一般将boot.img、system.img写入Rom,格式非固定,叫做刷机过程。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android】开发Android应用时对于Handler消息传递与缓存问题深入运用and理解
【Android】开发Android应用时对于Handler消息传递与缓存问题深入运用and理解
84 0
Android 组件化(一)项目模式管理、模式切换
在进行安装开发的时候我们经常会对项目进行不同业务逻辑处理分包,例如专门处理网络、数据库、业务逻辑代码的,如果我们不分包则所有东西写在一起,势必在开发过程中会浪费很多时间在寻找文件上,而分包的思想源于模块化,例如一些utils类,专门放到一个包下面,这样在使用的时候就能很快找到。节省开发时间,降低后期维护成本,那么组件化是什么?
117 0
基于Android的相册管理
社会经济和信息技术的快速发展使传统的数据管理方式逐渐升级为集中的数据管理。本毕业设计开发的电子相册系统就是在这样的环境下产生的。它可以在很短的时间内处理大量的数据,还可以缩短事务的运行时间,提高时间利用率。本电子相册系统采用的框架是SSM,编程语言是Java。数据库选择的是免费开源的MySQL。本电子相册系统能够满足大多数人的使用要求,界面布局大方美观,功能方面也基本满足人们日常生活所需。该系统还在解决安全性能方面提出了一些解决办法。总得来说,该系统不仅提高了管理者的工作效率,而且还实现了数据信息的集中的自动化管理,从而让数据信息的管理更加规范。本毕业设计开发的电子相册系统就是在这样的环境下产
84 0
Android窗口管理分析(4):Android View绘制内存的分配、传递、使用
Android窗口管理分析(4):Android View绘制内存的分配、传递、使用
220 0
Android窗口管理分析(3):窗口分组及Z-order的确定
Android窗口管理分析(3):窗口分组及Z-order的确定
278 0
android Handler消息处理源码剖析
1、什么是Handler A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue.
1114 0
Android窗口管理(2)——消息传递
本文内容参考:Android 核心分析(13) —–Android GWES之Android窗口管理 上一篇文章主要讲述了窗口的基本结构,那么在这样的结构下,系统如何管理窗口,如何下发事件,如何获取窗口状态?这篇博客将对这部分的内容进行介绍。 Android在窗口管理上采用了最为经典的C/S模式,Client端是各个Activity中的window,而Service端就是
1177 0
Android源码剖析之Framwork层消息传递(Wms到View)
 本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 前面讲过Wms、Ams与Activity的一系列交互,包括创建过程、消息传递、窗口展示等,紧接上篇介绍最终的实现者-窗口和View,上篇对窗口已经有了比较多的介绍,本篇我们再对View再更深一步的了解。
1333 0
+关注
TravelGrid
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像