
Android源码分析
文章平均质量分 88
jltxgcy
热爱Android,热爱开源。
展开
-
Service Manager进程启动,睡眠等待在进程proc->wait
本文参考《Android系统源代码情景分析》,作者罗升阳。一、~/Android/frameworks/base/cmd/servicemanager -----binder.h -----binder.c -----service_manager.c ~/Android//kernel/goldfish/drivers/原创 2014-05-14 20:19:39 · 3031 阅读 · 6 评论 -
FregServer进程,获取ServiceManager代理对象
本文参考《Android系统源代码情景分析》,作者罗升阳。一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFreg原创 2014-05-16 10:32:00 · 2352 阅读 · 0 评论 -
FregServer进程,封装进程间通信数据
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-05-17 15:47:30 · 2442 阅读 · 0 评论 -
FregServer进程,发送BC_TRANSACTION,唤醒ServiceManager进程,返回BR_TRANSACTION_COMPLETE,睡眠等待主线程thread->wait
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-05-17 21:07:40 · 3171 阅读 · 1 评论 -
Service Manager进程从睡眠中被唤醒,返回BR_TRANSACTION,执行真正意义的addService
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-05-18 18:30:16 · 3211 阅读 · 0 评论 -
Service Manager进程,发送BC_REPLY,唤醒FregServer进程,返回BR_TRANSACTION_COMPLETE,睡眠等待在proc->wait
本文参考《Android系统源代码情景分析》,作者罗升阳一、service manager代码: ~/Android/frameworks/base/cmd/servicemanager ----binder.c ----service_manager.c ----binder.h原创 2014-05-19 10:22:49 · 2767 阅读 · 0 评论 -
FregServer进程,返回BR_REPLY
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-05-20 11:25:47 · 2369 阅读 · 0 评论 -
FregServer进程,启动Binder线程池,睡眠等待在proc->wait
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-05-20 15:04:16 · 2031 阅读 · 0 评论 -
FregClient进程,创建一个BpFregService类型的代理对象
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-05-20 20:46:25 · 2284 阅读 · 0 评论 -
Binder本地对象,实体对象,引用对象,代理对象的引用计数
本文参考《Android系统源代码情景分析》,作者罗升阳。一、Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder ----BpBinder.cpp ----Parcel.cpp ----ProcessState.cpp --原创 2014-05-30 18:28:07 · 5343 阅读 · 1 评论 -
Binder对象死亡通知机制
本文参考《Android系统源代码情景分析》,作者罗升阳。一、Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder ----BpBinder.cpp ----Parcel.cpp ----ProcessState.cpp --原创 2014-05-31 14:57:18 · 7539 阅读 · 0 评论 -
Binder类图
上传两张Binder类图,有助于理解Binder进程间通信:原创 2014-06-04 16:12:34 · 2124 阅读 · 0 评论 -
FregClient和FregServer进程间通信
本文参考《Android系统源代码情景分析》,作者罗升阳一、测试代码: ~/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp原创 2014-06-04 21:43:43 · 2005 阅读 · 0 评论 -
开发Android硬件驱动程序
一、1、实现内核驱动程序模块 驱动程序freg的目录结构如下: ~/android-2.3_r1/kernel/goldfish ----drivers ----freg ----freg.h ----freg.c原创 2014-06-07 19:21:08 · 2243 阅读 · 0 评论 -
开发Android硬件抽象层代码
1、开发Android硬件抽象层代码 ~/android-2.3_r1/hardware/libhardware ----include ----hardware ----freg.h ----hareware.h -----m原创 2014-06-08 11:22:33 · 1647 阅读 · 0 评论 -
实现硬件访问服务的JNI方法
1、实现硬件访问服务的JNI方法 frameworks/base/services/jni ----com_android_server_FregService.cpp ----onload.cpp ----Android.mk com_android_server_FregService.cpp#define LOG_TA原创 2014-06-08 16:17:18 · 1723 阅读 · 0 评论 -
实现硬件访问服务
一、1、定义硬件访问服务接口(为了进程间通信) ~/android-2.3_r1/frameworks/base ----Android.mk ----/core/java/android/os/IFregService.aidl Android系统提供了一种描述语言来定义具有跨进程访问能力的服务接口,这种描述语言称为Andr原创 2014-06-08 20:24:10 · 1765 阅读 · 0 评论 -
开发Android应用程序来使用硬件访问服务
1、开发Android应用程序来使用硬件访问服务 ~/android-2.3_r1/packages/experimental/Freg ----AndroidManifest.java ----Android.mk ----src ----shy/luo/freg原创 2014-06-08 20:44:10 · 1550 阅读 · 0 评论 -
Java接口源代码--System和Service Manager进程间通信--应用程序和Service Manager进程间通信
本文参考《Android系统源代码情景分析》,作者罗升阳一、架构代码: ~/Android/frameworks/base/core/java/android/os ----IInterface.java (Interface) ----IServiceManager.java (IServiceManager) ----IBinder原创 2014-06-11 11:05:19 · 2613 阅读 · 1 评论 -
Java接口源代码--System和应用程序进程间通信
本文参考《Android系统源代码情景分析》,作者罗升阳一、架构代码: ~/Android/frameworks/base/core/java/android/os ----IInterface.java (Interface) ----IServiceManager.java (IServiceManager) -原创 2014-06-15 15:48:17 · 1749 阅读 · 0 评论 -
Andorid Binder进程间通信总结
一、Server和Service Manager进程间通信 Service Manager进程启动时,已经创建了Service Manager实体对象,没有Service Manager本地对象。 Server首先获取了Server代理对象,句柄值为0。没有Server引用对象。 Server----->Service Manager原创 2014-06-15 19:36:42 · 2891 阅读 · 0 评论 -
Android系统匿名共享内存(Anonymous Shared Memory)Java调用接口分析
一、Ashmem驱动程序 ~/Android/kernel/goldfish ----include ----linux ----ashmem.h ----mm ----ashmem.c 驱动程序详解请看《Android系统源代码情景分原创 2014-06-16 20:36:59 · 3329 阅读 · 0 评论 -
Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
一、Ashmem驱动程序 ~/Android/kernel/goldfish ----include ----linux ----ashmem.h ----mm ----ashmem.c 驱动程序详解请看《A原创 2014-06-17 09:55:30 · 3630 阅读 · 0 评论 -
Android Activity组件的启动过程
1、总图中的第一步 如图:第一步 ~/Android/frameworks/base/core/java/android/app ----ActivityManagerNative.javaclass ActivityManagerProxy implements IActivityManager{ p原创 2014-06-30 11:46:37 · 2823 阅读 · 6 评论 -
Android Service组件在新进程中的启动过程
1、startService 在Android系统匿名共享内存(Anonymous Shared Memory)Java调用接口分析,http://blog.youkuaiyun.com/jltxgcy/article/details/31414509一文,Client调用了如下代码:public class Client extends Activity implements OnCli原创 2014-07-01 19:50:35 · 1729 阅读 · 0 评论 -
Android Service组件在进程内绑定(bindService)过程
本文参考Android应用程序绑定服务(bindService)的过程源代码分析http://blog.youkuaiyun.com/luoshengyang/article/details/6745181和《Android系统源代码情景分析》,作者罗升阳一、Android Service组件在进程内绑定(bindService)过程 0、总图流程图如下: 1原创 2014-07-03 19:28:00 · 2337 阅读 · 0 评论 -
Android Service组件在新进程绑定(bindService)过程
1、首先看两个例子 (1)进程内 Client端public class CounterService extends Service implements ICounterService { ...... public class CounterBinder extends Binder { public CounterService getServ原创 2014-07-05 09:12:44 · 2103 阅读 · 0 评论 -
Android 系统广播机制
一、Android应用程序注册广播接收器(registerReceiver)的过程分析 参考Android应用程序注册广播接收器(registerReceiver)的过程分析http://blog.youkuaiyun.com/luoshengyang/article/details/6737352和《Android系统源代码情景分析》,作者罗升阳。 0、总图:原创 2014-07-05 11:19:51 · 2589 阅读 · 0 评论 -
Android Content Provider的启动过程源代码分析
本文参考Android应用程序组件Content Provider的启动过程源代码分析http://blog.youkuaiyun.com/luoshengyang/article/details/6963418和《Android系统源代码情景分析》,作者罗升阳。 0、总图流程图如下: 1、MainActivity进程向ActivityServiceMana原创 2014-07-12 17:04:09 · 2568 阅读 · 0 评论 -
Android Content Provider在应用程序之间共享数据的原理分析
本文参考Android应用程序组件Content Provider在应用程序之间共享数据的原理分析http://blog.youkuaiyun.com/luoshengyang/article/details/6967204和《Android系统源代码情景分析》,作者罗升阳。 0、总图流程图如下: 总体类图: 1、MainActivity进程向A原创 2014-07-14 09:36:00 · 2070 阅读 · 0 评论 -
Android Content Provider的共享数据更新通知机制分析
一、一共涉及到三个进程间通信,第一个和第二个进程间通信在第一张中,第三个进程间通信在第二个图中。二、其他内容参考Android应用程序组件Content Provider的共享数据更新通知机制分析http://blog.youkuaiyun.com/luoshengyang/article/details/6985171原创 2014-07-14 17:33:39 · 1576 阅读 · 0 评论 -
System、应用程序进程的Binder线程池和Handler消息循环
首先看一张Android系统启动流程图: 一个进程最重要的两项指标一个是启动了Binder线程池,也就是可以进程Binder进程间通信了。另一个是启动了Handler消息循环,可以使用了消息循环机制。 1、那么systemserver进程是什么时候实现上面两个机制的呢?见代码: 启动了Binder线程池。是子线程池。public static final void zyg原创 2015-06-28 08:46:51 · 3020 阅读 · 1 评论 -
Dalvik虚拟机总结
一、Dalvik虚拟机启动 在启动Zygote进程时,会启动Dalvik虚拟机,完成下面几件事: 1. 创建了一个Dalvik虚拟机实例; 2. 加载了Java核心类及注册其JNI方法; 3. 为主线程的设置了一个JNI环境; 4. 注册了Android核心类的JNI方法。void AndroidRuntime::start(const char* classN原创 2015-08-10 16:59:26 · 1387 阅读 · 1 评论 -
Zygote进程的启动流程
Zygote进程时由Android系统的第一个进程init启动起来的。init进程时在内核加载完成之后就启动起来的,它在启动的过程中,会读取根目录下的一个脚本文件init.rc,以便可以将其他需要开机启动的进程也一起启动起来。 Zygote进程在脚本文件init.rc中的启动脚本如下:service zygote /system/bin/app_process -Xzygote /syst原创 2015-09-17 09:40:14 · 1979 阅读 · 0 评论 -
System进程的启动流程第一部分
承接上篇文章Zygote进程的启动流程,我们继续分析System进程的启动流程。 Zygote进程在启动的过程中,除了会创建一个Dalvik虚拟机实例之外,还会将Java运行时库加载到进程中来,以及注册一些Android核心类的JNI方法来前面创建的Dalvik虚拟机实例中去。注意,一个应用程序进程被Zygote进程孵化出来的时候,不仅会获得Zygote进程中的Dalvik虚拟机实例拷贝,原创 2015-09-17 15:28:06 · 2151 阅读 · 0 评论 -
System进程的启动流程第二部分
继System进程的启动流程第一部分,我们接着分析com.android.server.SystemServer的main函数。如下:public class SystemServer { ...... native public static void init1(String[] args); ...... public static void main(St原创 2015-09-21 17:39:52 · 1769 阅读 · 0 评论 -
Launcher进程的启动
继System进程的启动流程第二部分之后,我们来分析Launcher进程的启动。public class Process { ...... public static final int start(final String processClass, final String niceName, int uid, int gid, int[] gids, int debugFl原创 2015-09-21 20:23:28 · 2938 阅读 · 0 评论 -
Home界面的启动
继上篇文章Launcher进程的启动,我们继续分析Home界面的启动。public final class ActivityThread { ...... public static final void main(String[] args) { SamplingProfilerIntegration.start(); Process.setArgV0(""); Loope原创 2015-09-22 16:18:00 · 2363 阅读 · 2 评论 -
关于Davlik解释器的一些思考
一直以来对Davlik虚拟机都有一些疑问: 1、最初被davlik解释执行的java代码是什么呢? 2、dalvik解释执行java代码时,如果遇到native代码(C/C++)怎么办呢? 3、如果native代码想调用java代码,davlik是怎么解释执行的呢? 4、Zygote进程fork出应用程序进程后,davlik是怎么解释执行ActivityThread类的ma原创 2016-03-25 18:24:56 · 1466 阅读 · 0 评论 -
Binder进程间通信二次总结
0x00 从进程的角度来看Android系统启动 0x01 一次同步Binder进程间通信 Client:处理从Binder Driver返回的命令status_t IPCThreadState::waitForResponse(Parcel *reply, status_t *acquireResult){ int32_t cmd; int32_t err;原创 2017-07-29 10:48:07 · 961 阅读 · 0 评论