随笔分类 -  Android FrameWork

摘要:开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: 接下来继续看SystemServer run函数执行过程: 以上6个步骤是SystemServer中关于AMS的调 阅读全文
posted @ 2016-08-14 22:05 __Shadow 阅读(7891) 评论(0) 推荐(2) 编辑
摘要:现有的手机中使用的卡SIM, USIM,UIM等统称为:UICC——Universal Integrated Circuit Card;这些卡之间数据结构是有些区别的,先来看看SIM卡的文件结构。一 Sim文件系统数据结构1 sim卡文件系统 SIM card file system structure: 2 文件结构 MF:The root level of the file system is known as the Master file. DF:Directories are known as Dedicated files and are of a fixed si... 阅读全文
posted @ 2013-05-07 19:16 __Shadow 阅读(6289) 评论(0) 推荐(0) 编辑
摘要:1 Android Log最近遇到一些抓log 的事情,很多来自网上达人的分享,加在一起总结一下:log文件分为实时打印的,还有状态信息的两种 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump, QXDM Log 状态信息的有:adb shell dmesg,adb shell dumpstate,adb shell dumpsys,adb bugreport实时log: adb logcat -b events -v time 打印系统事件的日志,比如触屏事件 tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这.. 阅读全文
posted @ 2013-05-03 16:54 __Shadow 阅读(11162) 评论(0) 推荐(0) 编辑
摘要:在底层代码中看到这样一条语句: system("/system/bin/sh -c \"am broadcast -a android.intent.action.AT_AIRPLANE_MODE --ez state true\"");system 这是干什么的啊?? 经google原来system是系统调用,执行一个系统命令。 这里system加上其参数的意思: 调用system,通过shell,执行可执行程序或者脚本am, 发送broadcast Action为:android.intent.action.AT_AIRPLANE_MODE 广播参数 阅读全文
posted @ 2013-05-03 10:40 __Shadow 阅读(3923) 评论(0) 推荐(0) 编辑
摘要:1 RIL_J与RIL_C通信 上层通常要和RILD通信,是通过Socket,在RIL_JAVA层实现;沿着这样代码流程进行Framework——native: Phone——RIL_JAVA——>RIL_CPP那么可不可以直接和RILD(RIL_CPP)进行通信呢? 肯定是可以的,因为通信使用的rildsocket,只要通过这个socket就可以和RILD进行通信 ;但实际中可靠的使用是不可行的,因为RILD在创建的时候, 设计初始化已经决定了RILD同时所支持的客户端的数量: 单卡仅支持一个客户端; 双卡实现方式代码提供了两种方式: 1)双卡两个RIL客户端对应一个RILD服务端.. 阅读全文
posted @ 2013-05-02 17:42 __Shadow 阅读(5718) 评论(4) 推荐(0) 编辑
摘要:一 DataConnectionTracker DataConnectionTracker:控制手机APN加载,数据连接; 包括:APN的创建,开机启动断开连接时,Radio状态改变时,Apn变化时,语音和数据业务切换时, 连接失败及自动重连时,漫游打开关闭时……这些情况下数据连接的处理; 对于CDMA和GSM两种网络通信技术,处理数据连接存在着一些差异,基本流程一致,下面看看CdmaDataConnectionTracker工作流程;二 APN加载1 APN概念 APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,目前分为两大类:CMWAP... 阅读全文
posted @ 2013-04-20 09:37 __Shadow 阅读(3123) 评论(0) 推荐(0) 编辑
摘要:一 ServiceStateTracker 作为Phone重要的Tracker:CallTracker,DataConnectionTracker,ServiceStateTrackerServiceStateTracker:处理和维护手机各种状态 小区位置CellLocation,网络状态ServiceState,信号强度SignalStrength, 业务限制状态RestrictedState,用户识别卡信息IccRecords……看一下ServiceStateTracker类结构图: 对于CDMA和GSM两种网络通信技术,存在着一些差异,下面看看CDMAServiceSta... 阅读全文
posted @ 2013-04-20 09:18 __Shadow 阅读(4643) 评论(0) 推荐(0) 编辑
摘要:1.权限 每个程序在安装时都有建立一个系统ID,如app_15,用以保护数据不被其它应用获取。Android根据不同的用户和组,分配不同权限,比如访问SD卡,访问网络等等。底层映射为Linux权限。2. 应用申请权限 1)应用开发者通过AndroidManifest.xml中<uses-permission>指定对应权限,再映射到底层的用户和组,默认情况下不设定特殊的权限。AndroidManifest加入权限后系统安装程序时会在图形界面中提示权限 2) 如果是缺少某个权限(程序中使用的某种权限而在AndroidManifest.xml中并未声名),程序运行时会在logcat中打印 阅读全文
posted @ 2013-04-10 11:17 __Shadow 阅读(12238) 评论(0) 推荐(1) 编辑
摘要:在android中的文件放在不同位置,它们的读取方式也有一些不同。本文对android中对资源文件的读取、数据区文件的读取、SD卡文件的读取及RandomAccessFile的方式和方法进行了整理。供参考。一、资源文件的读取:apk中资源文件 1) 从resource的raw中读取文件数据:try{ //得到资源中的Raw数据流 InputStream in = getResources().openRawResource(R.raw.test); //得到数据的大小 int length = in.available(); ... 阅读全文
posted @ 2013-03-04 19:51 __Shadow 阅读(41299) 评论(1) 推荐(6) 编辑
摘要:Android属性之build.prop生成过程 此部分网上这篇文章分析的不错:http://blog.csdn.net/thl789/article/details/7014300 转载过来 Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/product/<board>/system/目录下。在Android运行时刻可以通过property_get()[c/c++域] / SystemProperties_get*()[Java域]读取 阅读全文
posted @ 2013-02-28 15:38 __Shadow 阅读(21713) 评论(0) 推荐(0) 编辑
摘要:Android架构纵横谈之——软件自愈能力 来自:http://www.uml.org.cn/mobiledev/201209255.asp 笔者决定,从今天开始,连载Android架构纵横谈系列。之所以叫纵横谈而不是叫别的题目,是因为整个系列是横着竖着乱弹琴,可以说是阴阳不分,黑白颠倒,望湘园里望湘园。我不谈任何一个小的点,比如启动过程、某个HAL移植、一个具体的native service或者Java service,我要谈的是横穿在其中的设计思想,因此,我谈的任何一个方面,都有可能涉及到Android从内核到... 阅读全文
posted @ 2013-01-25 09:45 __Shadow 阅读(2485) 评论(1) 推荐(1) 编辑
摘要:一 Vold工作机制分析 vold进程:管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化等; vold进程接收来自内核的外部设备消息。Vold框架图如下: Vold接收来自内核的事件,通过netlink机制。 Netlink 是一种特殊的 socket; Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的socket API 就可以使用 netlink 提供的强大功能; Netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中;内核通过Netlink发送uEvent格式消息给用户空... 阅读全文
posted @ 2012-12-03 11:32 __Shadow 阅读(25206) 评论(0) 推荐(4) 编辑
摘要:一 TelephonyManager TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。 TelephonyManager类的对象可以通过:Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制,在开发的时候需要为其添加相应的权限。 TelephonyManager不是一个Framework层Service,属于Co.. 阅读全文
posted @ 2012-11-27 16:41 __Shadow 阅读(4551) 评论(0) 推荐(1) 编辑
摘要:一 监听手机Phone状态在手机里面监听Phone的状态有两种方法:1 注册接收广播 AndroidMenifest.xml: <receiver android:name="CallListener" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 阅读全文
posted @ 2012-11-23 15:39 __Shadow 阅读(14139) 评论(1) 推荐(1) 编辑
摘要:Framework层Ril控制流程分析RIL Native层分析:http://www.cnblogs.com/bastard/archive/2012/11/05/2754891.html一 RIL整体框架看一下整个RIL部分框架图: 实际上Framework部分比较复杂的,包含了很多类;但其核心的两个类是GSMPhone/,RIL.Java. 还包括围绕这两个类构成的状态管理,命令交互的类。二 PhoneApp 启动过程在AndroidManifest.xml文件中: <application android:name="PhoneApp" android:per 阅读全文
posted @ 2012-11-22 20:22 __Shadow 阅读(7522) 评论(2) 推荐(2) 编辑
摘要:系统启动过程图: Framework层所有的Service都是运行在SystemServer进程中;SystemServer进程是由Zygote进程创建。SystemServer进程启动分两个过程init1创建Service和进程状态对象;init2创建Framework层的Service,将其加入到ServiceManager中,最后启动launcher;Android提供了Watchdog类,用来监测Service是否处于正常工作中,是在SystemServer中启动的。 下面看一下SystemServer中Watchdog这个过程。SystemServer.java:public v.. 阅读全文
posted @ 2012-11-14 14:26 __Shadow 阅读(11047) 评论(2) 推荐(2) 编辑
摘要:一 Media Service进程启动Init.rc中描述的service对应linux 的进程:Media进程定义:service media /system/bin/mediaserver class main user media group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc ioprio rt 4servicemanager 进程定义:service servicemanager /system/bin/servicemanager class core user sys... 阅读全文
posted @ 2012-11-13 10:02 __Shadow 阅读(15726) 评论(1) 推荐(2) 编辑
摘要:通过对Ril部分代码的流程大致分析,其中的设计思路还是很值得学习:在RIL_JAVA层:通过RILSender与RILReceiver两个线程提高程序并发处理能力:发送 和接收;RILSender消息循环可以同时为多个请求服务;RILRequest将请求与响应绑定;在RIL_CPP层:Event机制:通过事件机制动态的对外部请求调度和处理,异步请求/处理模式,提高程序并发处理能力;消息映射表:采用消息数组的形式减少代码中存在较多的分支;模块间通信:迪米特法则,采用简单一致的接口,注册回调的方式; Ril.cpp Reference-ril.c Atchannel.c之间 阅读全文
posted @ 2012-11-05 15:34 __Shadow 阅读(1364) 评论(0) 推荐(0) 编辑
摘要:从modem传递来的网络端事件,通过readLoop线程处理: readLoop读取数据过程:static void *readerLoop(void *arg){ for (;;) { //从与modem通信设备端口读取数据 line = readline(); if (line == NULL) { break; } //处理数据 processLine(line); } onReaderClosed(); return NULL;}static void pr... 阅读全文
posted @ 2012-11-05 15:19 __Shadow 阅读(3232) 评论(0) 推荐(0) 编辑
摘要:rild进程rild进程 init.rc中描述: service ril-daemon /system/bin/rild class main socket rild stream 660 root radio socket rild-debug stream 660 radio system user root进程rild.c中:int main(int argc, char **argv){ const char * rilLibPath = NULL; const RIL_RadioFunctions *(*rilInit)(const stru... 阅读全文
posted @ 2012-11-05 12:00 __Shadow 阅读(10267) 评论(0) 推荐(1) 编辑