Android Framework
文章平均质量分 74
gbmaotai
这个作者很懒,什么都没留下…
展开
-
ION MEM
IONION是Google的下一代内存管理器,用来支持不同的内存分配机制,如CARVOUT(PMEM),物理连续内存(kmalloc), 虚拟地址连续但物理不连续内存(vmalloc), IOMMU用户空间是通过/dev/ion来创建clientstruct ion_heap用来表示内存分配的相关信息,包括id, type, name等。 enum ion_heap_type { ...原创 2020-03-28 17:12:48 · 555 阅读 · 0 评论 -
android sensor
驱动层上报input_report_abs(...,ABS_X,...);input_report_rel(..., REL_X, ...);input_report_key(..., KEY_XXX, 0/1);HAL定义XXXSensor, ID_XXX,SENSOR_TYPE_XXXclass XXXSensor : public SensorBase {public:...原创 2020-01-15 16:02:26 · 225 阅读 · 0 评论 -
android强弱指针
class MyClass:public RefBase{public: virtual ~MyClass(); //必须要有 void func();}强指针 spsp<MyClass> p_obj; p_obj = new MyClass();p_obj->func(); //可以使用MyClass* pmyclass;sp&l...原创 2020-01-03 17:52:44 · 180 阅读 · 0 评论 -
android 的str_parms
android str_parms 是以一个string作为key的一系列参数, value可以是string ,int …用hashmap实现HashMapHashMap 是一个散列表,它存储的内容是键值对(key-value)映射。Map中Key 和Value的, 增加一个对key值的Hash数组+Bucket链表hash的种类加法hash所有数相加乘法hashin...原创 2019-12-31 11:40:26 · 1285 阅读 · 1 评论 -
healthd相关的技术epoll&uevent&timerfd&binder
healthdepoll三种事件uevent //内核上报eventalarmtimer //定时执行updatebinder //client通信static int healthd_init() { epollfd = epoll_create(MAX_E...原创 2019-12-20 11:51:17 · 454 阅读 · 0 评论 -
Binder(四) Native层的服务的过程
framework/native/libs/binder - Binder.cpp - BpBinder.cpp - IPCThreadState.cpp - ProcessState.cpp - IServiceManager.cpp - IInterface.cpp - Parcel.cppdefaultServiceManagersp<IService...原创 2019-12-13 15:31:11 · 202 阅读 · 0 评论 -
Binder (三) RPC流程
struct binder_transaction { int debug_id; struct binder_work work; struct binder_thread *from; //发送端线程 struct binder_transaction *from_parent; //上一个事务 st...原创 2019-12-12 15:52:19 · 570 阅读 · 0 评论 -
Binder (二) binder 机制的管理者的角色Service Manager
binder 机制的管理者的角色Service ManagerService Manager进程负责管理client server角色, 上下文管理者context_managerBINDER_SET_CONTEXT_MGRint binder_become_context_manager(struct binder_state *bs){ return ioctl(bs->...原创 2019-12-10 11:39:42 · 352 阅读 · 0 评论 -
Binder (一) mmap与一次拷贝原理
Binder机制跨进程通信IPC远程过程调用手段RPC4个角色进行粘合,Client、Server、Service Manager和Binder驱动程序Binder Driver misc设备/dev/binderstatic struct file_operations binder_fops = { .owner = THIS_MODULE, .poll = binder_p...原创 2019-11-29 15:10:41 · 2505 阅读 · 1 评论 -
SEAndroid&SELinux
SELinuxSELinux则是由NSA(美国国安局)在Linux社区的帮助下设计的一个针对Linux的安全强化系统。在LinuxKernel中,SELinux通过LSM(LinuxSecurity Modules)实现.SELinux是一种基于域-类型(domain-type)模型的强制访问控制(MAC)安全系统。自主访问控制模型(Discretionary Access Contr...原创 2019-11-07 15:57:04 · 415 阅读 · 0 评论 -
蓝牙配对鉴权
不需要鉴权Action: BluetoothDevice.ACTION_BOND_STATE_CHANGED远程设备不需要鉴权,可以直接使用需要输入Action : BluetoothDevice.ACTION_PAIRING_REQUEST。BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION需要用户确认Bluetooth...原创 2019-09-05 15:18:46 · 4332 阅读 · 0 评论 -
Android 系统自定义签名
1. 工具make_key生成x509.pem(公钥) 和pk8 (私钥)openssl req -new -x509 -sha1 -key ${two} -out $1.x509.pem \ -days 10000 -subj "$2" & openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8 -nocrypt...原创 2019-08-27 09:11:57 · 1023 阅读 · 0 评论 -
虚拟机中内存管理
什么是Heap(堆)在Dalvik虚拟机中,堆实际上就是一块匿名共享内存. 一个mspace(libc中的概念),可以通过libc提供的函数create_mspace_with_base创建一个mspace,然后再通过mspace_开头的函数管理该mspace。例如,我们可以通过mspace_malloc和mspace_bulk_free来在指定的mspace中分配和释放内存。函数dvmAll...原创 2019-01-28 11:29:00 · 882 阅读 · 0 评论 -
netlink内核态和用户态使用
vold进程:1.管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化2.3G 4G 模块支持G3Dev.cpp ----- usb_modeswitch -W -I …netlinkNetlink是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的socketAPI就可以使用netlink提供的强大功能,内核态需要使用专门的内核A...原创 2018-11-05 10:21:55 · 739 阅读 · 0 评论 -
Android上的容器
虚拟机(VM)每个虚拟机中都有一个独立的Kernel.容器 chroot容器运行在主机的kernel之上。在经过 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)linuxdeploy在android上运行的的chroot容器支持下载各种linux发行版,Debian、Ubuntu、Kali Linux、Arch Linux、Fedora...原创 2018-10-26 09:56:33 · 5258 阅读 · 0 评论 -
Android IPC方式
1. 管道:在创建时分配一个page大小的内存,缓存区大小比较有限; 单向 1页,即4K字节getconf PAGESIZE2. 消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;3. 共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;4. 套接字:作为更通用的接口,传输效率低...原创 2018-10-11 16:47:06 · 499 阅读 · 0 评论 -
RPC & AIDL
RPC & AIDL一般创建的服务并不能被其他的应用程序访问。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。Android使用AIDL来实现。每一个进程都有自己的Dalvik VM实例,都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行着自己的操作,都在自己的那片狭...原创 2018-10-11 16:19:08 · 394 阅读 · 0 评论 -
Android earlysuspend
early_suspend / late_resumeLCD显示屏是休眠了,触摸屏也休眠了,但是标准的Linux系统并没有进入休眠Android在标准的Linux休眠与唤醒机制上又加了一层,就是early_suspend / late_resume使用early_suspend()进行休眠的设备,它休眠的时刻早于其他设备,使用late_resume()唤醒的设备,它被唤醒的时刻要晚...原创 2018-08-22 11:30:02 · 578 阅读 · 0 评论 -
Package Manager
PackageInstallerPackageInstaller是安卓上默认的应用程序,用它来交互式地安装普通包文件。 PackageInstaller提供了用户界面来管理应用或者包文件。PackageInstaller调用一个叫 InstallAppProgress的activity来获取用户发出的指令。InstallAppProgress会请求Package Manager Service...原创 2018-08-22 11:44:22 · 1385 阅读 · 0 评论 -
Android 安装包
1. /data/system/packages.xml++/data/system/packages.xml++由PackageManagerService.java生成,里面记录了系统当中安装的APK的所有属性,权限等信息。当系统中的APK安装、删除、升级时,文件就会被更新,不要手动修改。package代表一个APK的属性,它的属性含义如下:name:APK的包名codeP...原创 2018-08-20 15:43:34 · 3193 阅读 · 0 评论 -
AIL
Android Init Language,这里简称为AIL AIL由如下4部分组成。1. 动作(Actions)2. 命令(Commands)3. 服务(Services)4. 选项(Options)on 5类触发器。1. boot这是init执行后第一个被触发Trigger,也就是在 /init.rc被装载之后执行...原创 2018-08-20 18:19:10 · 1268 阅读 · 0 评论 -
Android 启动
1. 启动Init进程当Linux内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序。 Init所做的事情创建目录,初始化属性处理配置文件的命令(主要是init.rc文件),包括处理各种Action。性能分析(使用bootchart工具)。无限循环执行command(启动其他的进程)。解析配置文件init.rc(系统配置文...原创 2018-08-20 18:18:10 · 197 阅读 · 0 评论 -
Android 输入子系统
input服务的启动流程1. android启动的时候会启动很多个service,参考SystemServer.java,会启动InputManagerService这个服务:inputManager = new InputManagerService(context, wmHandler); ServiceManager.addService(Context.INPUT_SE...原创 2018-08-20 17:07:17 · 317 阅读 · 0 评论 -
Android 通信方式
最常用的通信方式是Binder、Socket、Handler,当然也有少量其他的IPC方式,比如杀进程Process.killProcess()采用的是signal方式。1. BinderBinder通信采用c/s架构,从组件视角来说,包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统中的各种服务2.S...原创 2018-08-21 10:26:18 · 1931 阅读 · 0 评论 -
Local Socket
LocalSocket 在Unix域名空间创建一个套接字(非服务端)。 是对Linux中Socket进行了封装,采用JNI方式调用,实现进程间通信。 具体就是Native层Server和Framework层Client之间进行通信,或在各层次中能使用Client/Server模式实现通信。LocalServerSocket 创建服务器端Unix域套接字,与LocalS...原创 2018-08-21 14:21:41 · 1002 阅读 · 0 评论 -
Android 异常
1. Timeout (ANR)对于Android系统来说,比较常见的便是Service, Broadcast, provider以及input, 当普通app进程超过一定时间没有执行完, 则会弹出应用无响应(Application Not Responding, ANR)的对话框. 如果该app运行在system进程, 更准确的来说,应该是(System Not Responding, SN...原创 2018-08-21 14:32:55 · 171 阅读 · 0 评论 -
SEAndroid
SEAndroid安全机制所要保护的对象是系统中的资源,这些资源分布在各个子系统中,例如我们经常接触的文件就是分布文件子系统中的。 实际上,系统中需要保护的资源非常多,除了前面说的文件之外,还有进程、socket和IPC等等。在用户空间中,SEAndroid包含有三个主要的模块,分别是安全上下文(Security Context)、安全策略(SEAndroid Policy)和安全服务(Se...原创 2018-08-21 17:39:56 · 789 阅读 · 0 评论 -
property
1) 系统一启动就会从若干属性脚本文件中加载属性内容;2) 系统中的所有属性(key/value)会存入同一块共享内存中;3) 系统中的各个进程会将这块共享内存映射到自己的内存空间,这样就可以直接读取属性内容了;4) 系统中只有一个实体可以设置、修改属性值,它就是属性服务(Property Service);5) 不同进程只可以通过socket方式,向属性服务Servic...转载 2018-08-21 18:10:42 · 1123 阅读 · 0 评论 -
Android native异步消息机制
谷歌在Android native层实现的一个异步消息机制,在这个机制中几乎不存在同步锁,所有的处理都是异步的,将变量封装到一个消息AMessage结构体中,然后放到队列中去,后台专门有一个线程会从这个队列中取出消息然后执行,执行函数就是onMessageReceivedAMessage类struct AMessage : public RefBase { //构造函数,包括两个参数,...原创 2018-09-18 18:17:03 · 677 阅读 · 0 评论 -
Android 内存分析
VSSVss是占用的虚拟内存,如果没有映射实际的内存也算进来。RSSRss是占用的物理内存。是共享内存+私有内存。因为共享内存是多个进程共用的,所以存在重复计算。PSSPss是占用的私有内存加上平分的共享内存。例如一块1M的共享内存被两个进程共享,那每个进程分500K。各进程的Pss相加基本等于实际被使用的物理内存,所以这个经常是最重要的参数。USSUss Unique Set Si...原创 2018-09-20 17:41:03 · 300 阅读 · 0 评论 -
Android Low Memory Killer
Android的Low Memory Killer是在标准linux kernel的OOM基础上修改而来的一种内存管理机制,当系统内存不足时,杀死Bad进程释放其内存。 Bad进程的选择标准有两个:oom_adj和占用内存的大小。oom_adj代表进程的优先级,数值越大,优先级越高,对应每个oom_adj都有一个空闲内存的阈值。Android系统会对进程的重要性进行评估,并将重要性以“oom...原创 2018-08-22 11:19:19 · 222 阅读 · 0 评论