Jimmy's Blog

Binder
Android

(原创)ServiceManager.addService流程学习

  最近在公司有听到同事做的一个需求。就是一个非系统应用(不使用系统签名),通过额外的方法,将自身一个AIDL service的binder句柄通过ServiceManager.addService接口注册到ServiceManager中。那么其他应用就能通过ServiceManager.getService来获取到该service提供的binder句柄,从而进行跨进程调用了。   首先这里定一个调调,那就是我们不评判这样实现是否有问题。我们之关注技术,这里我们想关注的点有:…

2021-03-01 0条评论 1077点热度 0人点赞 jimmychen 阅读全文
Binder

Native(C、C++)跨层访问Java注册的service

  上一篇我们介绍了在Java层如何跨层访问在Native(C、C++)层注册的Binder service。这一篇我们打算反过来,在Native(C、C++)层跨层访问Java层注册的Binder service。如果对上一篇有初步了解的话,对这一篇的实现应该也不会有太多的问题,毕竟都是通过Binder调用。老样子,本篇的示例代码也是在没有添加selinux权限下进行的 Java层实现service   Java层在AIDL的帮助下,实现service会比较简单,所以接下来…

2020-03-01 0条评论 2055点热度 0人点赞 jimmychen 阅读全文
Binder

Java跨层访问native(C/C++)注册的service

  进行Binder开发时,比较多是在同语言下进行的,比如在JAVA下可以手动实现或者通过AIDL实现,在C++下手动实现。但是Binder也是可以夸语言通信的,这里打算分两篇来进行说明,其中一篇是在通过native层实现service的代码,并注册到system_server中,在上层通过Java实现访问;另一篇则相反,在Java层中实现service的代码,在native通过程序访问;那下面开始看代码实现,不过需要注意的是这里面的代码添加相应的selinux权限,所以一切实验都是在开机后通过…

2020-02-23 0条评论 1930点热度 1人点赞 jimmychen 阅读全文
Binder

(原创)在Java层使用Binder创建服务

  在Java层添加服务,相对于native层要简单一些,这还是得多谢AIDL啊,下面直接开始在Android Framework中添加一个Binder service 1. 添加一个aidl文件 在aidl文件中,定义你需要用到的方法,这个aidl文件就类似于在native层中添加service,用到的IXXXXXService.h文件类似,这个文件需要放到frameworks/base/core/java/android/app路径下,这里我们也定义类似在上一节中native层做的服务,提供…

2018-01-11 0条评论 1303点热度 1人点赞 jimmychen 阅读全文
Binder

(原创)在Native层使用Binder创建服务

  要编写Native层的binder服务,其实大家可以参考Android系统中带有的服务进行编写,这里主要讲流程,原理性的东西大家可以参考博主之前的文章。另外我们这里编写的服务程序只是简单的提供加减乘除运算的,不做特别难的事情。 流程 在着手编写native层binder服务前,我们先整理一下Binder调用的整个流程 Client调用Service   client要调用Service的功能,首先需要获取到一个BpXXXXXService对象,然后就可以直接调用BpXXX…

2018-01-11 0条评论 2478点热度 0人点赞 jimmychen 阅读全文
Binder

(原创)IPCThreadState和ProcessState

  Android中的ProcessState是客户端和服务端的公共部分,作为Binder通信的基础,ProcessState是一个singleton类,每个进程只有一个对象,每个对象负责打开Binder驱动,建立线程池,让其进程里面的所有线程都能够进行binder通信。与之相关的是IPCThreadState,每个线程都有一个IPCThreadState实例登记在Linux线程的上下文附属数据中,主要负责Binder的读取、写入和请求处理。 一. ProcessState 1.1 Proces…

2018-01-11 0条评论 2352点热度 0人点赞 jimmychen 阅读全文
Binder

(原创)BpBinder、BBinder和IInterface的关系

  本来想一篇文章就把BpBinder、BBinder、IBinder和IInterface的关系弄清楚的,但是感觉脱离Binder实际的使用流程来看这几个类,总觉得抓不到重点,所以感觉也还是和前面的文章一样,只是直接看里面的几个重要的函数调用,先不管实际Binder实际调用流程是怎么样的 IBinder   BpBinder和BBinder都是Android中与Binder通信相关的代表,他们都是从IBinder中继承而来的。其中BpBinder是客户端用来与Server交…

2018-01-11 1条评论 4208点热度 1人点赞 jimmychen 阅读全文
Binder

(原创)Android中的Service和Binder关系

  因为C/C++层binder服务的使用过程和Java层的服务使用过程有所不同,所以这里分C/C++和Java两个层次看一下。 C/C++层   经过前面的文章,对一些Binder会用到的类、组件有了认识,所以在这篇博客中要是有遇到前面已经讲过的类,大部分会跳过。如果要讲解Android中各个Service和Binder的关系,那么最好的办法还是找一个具体的Service进行讲解,所以这里还是找MediaServer进行讲解吧,毕竟部分已经有人讲解过,自己再重新分析一遍代码…

2018-01-11 0条评论 2197点热度 1人点赞 jimmychen 阅读全文
Binder

(原创)servicemanager分析

servicemanager是binder部分的关键组件之一,binder client要想获取service提供的服务,可以根据service的名字向servicemanager发出获取service的请求。而binder service则需要在servicemanager中注册之后,才能够被别的client使用。显然要在其他binder client或者binder service访问servicemanager前,servicemanager就得启动了,同时servicemanager需要作为守护进程一直运行…

2018-01-11 0条评论 1676点热度 0人点赞 jimmychen 阅读全文
Binder

(原创)Linux中的Binder驱动

前言   Binder驱动是Android专用的,但是其在Linux底层中的框架和Linux驱动是一样的。Binder驱动是以Misc设备进行注册,binder驱动是一个虚拟的设备驱动,没有和任何的实际硬件相关联,其主要的作用就是进行设备内存的管理。这篇主要看一下Linux下Binder驱动的代码。 Binder驱动代码分析   既然Binder驱动也是一个Linux驱动,那么必然是按照Linux驱动的规则编写的,所以我们先来查看一下init函数的代码。 [crayon-62…

2018-01-11 0条评论 3197点热度 1人点赞 jimmychen 阅读全文
分类
  • Android / 45篇
  • ART虚拟机 / 7篇
  • Binder / 9篇
  • C/C++ / 10篇
  • JNI编程指南与规范 / 18篇
  • Linux / 12篇
  • SQL数据库 / 10篇
  • SurfaceFlinger / 10篇
  • 再战C Primer Plus / 14篇
  • 再战C++ Primer Plus / 14篇
  • 网络编程 / 4篇
Adsense

COPYRIGHT © 2022 Jimmy's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang