Binder 原理浅析 # 数据传输的集装箱 Parcel

Binder 是 Android IPC 的重要角色,在平时一般的工程中,知道 AIDL 的用法大抵都够用了,但如果要谈 Binder 的内部原理如调用效率、数据传输限制,或者 Binder 的其他用法如 pingBinder,再或者写一个自己的 ServiceManager,Binder 的深度原理就值得探究了,本系列从数据传输出发,逐步解开 Binder 的原理。

Parcel 在 Android 中扮演着跨进程传输的集装箱的角色,是数据序列化的一种手段,平时工程中获取的 Binder 对象接口就是靠它来跨进程传输的,本文来看 Parcel 对象的数据传输原理。

更多>>

Android 中的自启行为浅析 # Broadcast(一)

在 Android 越来越普及的当下,Android 手机在用户心里最尖锐的问题总结起来就是两个关键词:卡慢、费电,恰好本文系列讲述跟这两项都有关系,Android 的普通应用程序的自启动行为直接导致了内存紧张、CPU占用以至于手机 UI 卡慢、耗电快。这里我们说的 “自启动” 这个字眼实际上指的是:用户未有主动启动目标应用程序,目标应用程序进程却被启动的行为,说是自启动,其实是有其他进程把应用程序给带起来了。

本文将从 Broadcast 的角度来分析第三方应用是如何通过广播来自启的。

更多>>

Dalvik虚拟机 - 类的加载

Dalvik虚拟机系列的文章力求将从虚拟机开始运行、类的加载/初始化、字节码的解释执行都覆盖到。加载类是我们最常接触但又不经常直接去显示加载的一个行为,本文从 ClassLoader.loadClass 说起来说明类加载的具体过程,这也将更容易理解主动修改类定义带来的一些如同hotpatch的功能。

更多>>

Android 权限管理 —— AppOps

Android 的安全保护源于权限,每个 App 需要申请权限才能使用特定的功能,用户在安装的时候可以浏览 App 已申请的权限再决定是否安装,不过一旦安装就相当于默认了可以使用该权限,所以这一功能基本属于鸡肋,后来便出现了权限管理这一安全防护:例如 360 手机卫士、安全管家、LBE一类第三方安全软件。除此之外,android 系统也并不是没有作为,在4.3系统以后出现了 AppOps 隐藏功能,能够针对 manifest 部分申请的权限进行一层限制,为什么说是隐藏功能呢?AppOps 本来有个可设置页面 AppOpsSummaryActivity,但是 Google 工程师一而再再而三的隐藏该界面,就是为了只让系统应用拥有后台修改 AppOps 的权限,不提供给其他用户或者第三方软件修改的机会。本文将从实例(修改短信权限)出发,分析 AppOps 的实现原理和鉴权过程。

更多>>