Android JNI原理分析 Posted on 2020-05-16 一、概述JNI(Java Native Interface,Java本地接口),是连接Android Native层和Java层的纽带,这个是Java所特有的,并不是Android系统独有。Java作为跨平台的语言,依靠的是虚拟机,虚拟机采用C/C++编写,适配各个系统,通过JNI为上层Java提供 ... Read more »
Android10.0如何hook Activity Posted on 2020-04-04 在插件化中,hook Activity作为最基本的技术,用来在宿主app中新增Activity,而通常情况下,Activity必须在Manifest中注册在才可以使用,下面将就Android10.0来分析hook Activity的详细过程。 要hook Activity之前,必须知道Activit ... Read more »
深入理解Binder机制6-总结篇 Posted on 2020-03-15 深入理解Binder机制系列如下: 深入理解Binder机制1-AIDL原理深入理解Binder机制2-注册服务addService深入理解Binder机制3-获取服务getService深入理解Binder机制4-bindService过程分析深入理解Binder机制5-binder驱动分析深入理 ... Read more »
深入理解Binder机制5-binder驱动分析 Posted on 2020-02-26 一、概述Binder驱动是Android专用的,但底层的驱动架构与Linux驱动一样。binder驱动在以misc设备进行注册,作为虚拟字符设备,没有直接操作硬件,只是对设备内存的处理,主要是驱动设备的初始化(binder_init),打开(binder_open),映射(binder_mmap), ... Read more »
深入理解Binder机制4-bindService过程分析 Posted on 2020-02-10 一、概述1.1 Binder架构Android内核基于Linux系统,而Linux系统进程间通信方式有很多,如管道,共g享内存,信号,信号量,消息队列,套接字。而Android为什么要用binder进行进程间的通信,这里引用gityuan在知乎上的回答: (1)从性能的角度数据拷贝次数 Binder ... Read more »
深入理解Binder机制3-获取服务getService Posted on 2020-02-04 一、概述本文将介绍系统服务获取的具体流程,如获取ActivityManagerService时,通过ServiceManager中的getService静态方法获取具体的服务,这个流程经历Java层,Native层,Kernel层,其通信流程如下: 1.发起端进程向Binder Driver发送b ... Read more »
深入理解Binder机制2-注册服务addService Posted on 2020-01-10 一、概述本文将分析系统服务的注册流程,如注册ActivityManagerService时,通过ServiceManager中的静态方法addService注册具体的服务。ServiceManger是Binder IPC通信过程中的守护进程,是一个具体的服务,其功能主要是查询和注册服务。 二、Ser ... Read more »
深入理解Binder机制1-AIDL原理 Posted on 2019-12-25 Binder作为Android系统中重要的进程间通信方式,了解其基本的原理,对于分析问题具有重要的作用。由于Binder架构涉及的内容比较多,后面将会从应用层、框架层、Native层、内核层四个层次来说明Binder的原理。首先将从应用层的AIDL开始逐渐深入到内核层。整个系列的文章如下: 深入理解 ... Read more »
Android OTA升级流程分析 Posted on 2019-12-10 一、概述目前Android系统终端的升级主要是通过无线进行的(FOTA,Firmware Over-The-Air),主要流程是通过无线方式将升级包下载到终端,而后调用系统的升级接口进行升级。本文主要分析升级包下载后,调用系统升级接口之后的流程。 1.1 升级包结构升级包是用make otapac ... Read more »
Android SystemProperties系统属性分析 Posted on 2019-11-20 SystemProperties.set方法可以设置系统属性,通过设置系统属性可以启动一些服务和操作,如关机,重启、uncrypt服务等。下面将分析为什么设置系统属性,可以做到即时生效某些操作。 下面将以SystemProperties.set(“ctl.start”, “uncrypt”);为例说 ... Read more »
SELinux权限修改 Posted on 2019-11-02 SELinux权限修改 方法一:adb修改SELinuxEnforcing(已打开) Permissive(已关闭) 123getenforce //获取当前seLinux状态setenforce 1 //打开seLinuxsetenforce 0 //关闭seLinux 方法二 ... Read more »
Android四大组件与进程启动间关系 Posted on 2019-10-31 基于Android10.0,分析四大组件与进程启动间的关系 一、概述Android进程对于系统来说非常重要,而Android四大组件是Android应用的基础。在前面分析过Android进程创建的过程,那么对于四大组件来说和进程之间又有什么关联,这里主要看AMS.startProcessLock ... Read more »
Android进程创建流程分析 Posted on 2019-10-20 基于Android10.0,分析进程的创建过程 一、概述每个app在启动前都必须创建一个进程,这个进程是由zygote fork而来,进程具有独立的资源空间,用于app上运行的各种Activity、Service等组件。大多数情况下一个应用运行在一个进程中,除非在AndroidManifest. ... Read more »
开机广播BOOT_COMPLETED发送流程分析 Posted on 2019-10-05 基于Android10.0,分析BOOT_COMPLETED的发送流程 一、概述开机广播在很多应用中都会用到,用来启动应用程序,下面将介绍开机广播的广播过程。这个过程比较复杂,需要和AcitvityManagerService、WindowManagerService、PackageManage ... Read more »
BroadcastCast广播机制原理 Posted on 2019-09-22 基于Android10.0,分析广播机制的原理 一、概述广播(BroadcastCast)用于进程/线程间的通信,广播有发送广播和接收广播两部分组成,其中广播接收者BroadcastReceiver是四大组件之一。 BroadcastReceiver分为两类: 静态广播:通过AndroidMa ... Read more »