Android内核
文章平均质量分 76
风语
这个作者很懒,什么都没留下…
展开
-
Android内核源码阅读环境配置
一般读源码都用source insight,只是这个软件貌似只有windows版的,而且界面我看得很不习惯。最近发现可以用sublime + ctags来看源码,其中ctag是作为sublime的插件来安装的,而sublime是支持各个平台的,包括windows,linux和mac。安装流程网上都能搜的到,我在这里大致说一下。首先安装sublime,然后在sublime里安装package cont原创 2015-12-20 21:40:55 · 880 阅读 · 0 评论 -
Android BufferQueue原理分析
在Android中,BufferQueue是Surface实现本地窗口的关键,驻留在SurfaceFlinger进程中进行服务,下面从BufferQueue的结构开始分析,class BufferQueue : public BnGraphicBufferProducer, public BnGraphicBufferConsumer, ...原创 2018-11-23 20:48:25 · 4776 阅读 · 1 评论 -
谈Android PowerManager的Hook技术
在插件中,需要禁止插件调用系统原生接口持有WakeLock,Hook技术是不错的解决方案。通过阅读系统源码,可以了解到PowerManager持有WakeLock操作最后都通过Binder跨进程调到系统服务中,我们只要拦截这个Binder的所有调用即可。思路是先通过反射拿到这个IPowerManager的Binder,然后动态生成该Binder的代理对象,再覆盖原有的Binder即可。public原创 2017-03-29 11:20:15 · 1459 阅读 · 5 评论 -
getSystemService的奇怪问题
先看如下代码,这两个PowerManager不是同一个对象,PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE);PowerManager manager2 = (PowerManager)getApplicationContext().getSystemService(POWER_SERVICE);只能从内核源原创 2017-03-28 20:45:22 · 2305 阅读 · 0 评论 -
Android蓝牙源码分析——关于GKI
首先以gki模块的初始化为入口,在gki_ulinux.c中,如下: void GKI_init(void){ pthread_mutexattr_t attr; tGKI_OS *p_os; memset (&gki_cb, 0, sizeof (gki_cb)); gki_buffer_init(); gki_timers_init原创 2016-08-19 09:13:23 · 5924 阅读 · 0 评论 -
Android蓝牙源码分析——StateMachine状态机
StateMachine有自己单独的工作线程,protected StateMachine(String name) { mSmThread = new HandlerThread(name); mSmThread.start(); Looper looper = mSmThread.getLooper(); initStateMachine(name, looper)原创 2016-08-18 10:19:46 · 3998 阅读 · 0 评论 -
Android蓝牙源码分析——Gatt连接(一)
本文将重点描述Android蓝牙GATT连接的大致流程,不会过多地纠缠代码细节,只为了从架构上梳理清楚,为接下来深入研究底层机制奠定一个宏观认识。 首先建立GATT连接前,我们通常要扫描蓝牙设备,获得设备的BluetoothDevice对象,然后调用connectGatt去建立GATT连接并等待连接状态回调,接下来我们就开始分析这一过程,首先看看connectGatt的实现:public Bl原创 2016-08-21 19:32:33 · 14950 阅读 · 5 评论 -
如何拦截Activity的启动(二)
本文我们将以一个工程为例,验证Hook Activity的可行性。我们的目标如下: - 指定插件Apk路径,启动插件 - 插件内部可启动Activity - 插件可作为独立App启动首先新建插件工程,和正常APP一般无二,没有任何特别的地方。所有的Activity都是从android.app.Activity继承,可以安装并运行。接下来新建宿主工程,并将插件Apk用adb push到宿主原创 2016-02-16 18:21:11 · 2704 阅读 · 2 评论 -
如何拦截Activity的启动(一)
要把正常的apk当做一个插件启动起来,首先我们拿到这个插件的Launcher Activity,然后启动宿主APP中的Proxy Activity,在这里面调用插件的Activity的生命周期回调。结果会报Null Pointer Exception,原因在于调用插件Activity的onCreate时会调用到super.onCreate,里面需要用到的一些上下文没有初始化过,所以为null。这里原创 2016-02-15 13:57:09 · 3166 阅读 · 0 评论 -
关于Handler的拦截
为什么要Hook Handler?Android系统中存在大量Handler,我们要改变系统的某些行为就需要Hook掉一些关键节点的Handler,为此,我们要清楚Handler的工作原理。先做一个实验来看看Hook Handler的效果,如下:public class MainActivity extends Activity { private Button mBtnShow; p原创 2016-02-16 11:14:22 · 2759 阅读 · 0 评论 -
如何进行资源的热修复
热修复中可能会涉及到资源文件的替换,有两个问题: 一、到底能不能替换?这里是将主APP中的资源替换成Patch apk中的资源,可以实现么? 二、怎么替换,会不会有资源id冲突的问题?本章就来讨论这两个问题。加载patch apk时,和加载插件类似,可以参考我之前的两篇文章:http://blog.csdn.net/dingjikerbo/article/details/47757511 ht原创 2016-01-11 18:08:10 · 3146 阅读 · 1 评论 -
Android Camera源码分析
回顾这半年做的项目基本都跟Camera有关,从手势识别控制空调,到人脸识别的门禁,都是围绕相机的数据处理和渲染。这里相机不限于本地的相机,还包括远程的RTSP相机,要将数据流拉到本地进行渲染。这两天好好读了一下Camera的源码,大概理清了整体架构,总结了一下,其实没多少东西,Android的各个模块都差不多,都是有个系统服务,然后Java封一层,Native封一层,Java层和Native层的...原创 2018-11-23 20:55:40 · 3738 阅读 · 0 评论