Android源码分析
文章平均质量分 79
疾风细语
Soon or later
展开
-
Android源码网站
Android源码网站提供两个比较常用的袁爱民网站https://www.androidos.net.cn/sourcecode网站有Android各个版本的全部源码,包括SDK、Framework、硬件驱动等,适合Framework开发人员http://androidxref.com/网站有Android 9之前的SDK源码,优点是可以做全局的搜索,不仅可以搜文件名,还可以搜方法名和调用情况,缺点是有点慢,源码下载下来看...原创 2021-04-06 19:02:58 · 2067 阅读 · 0 评论 -
Android Home键之后启动Activity延迟5秒
按home键之后,所有activity的启动请求都延迟了5秒,下面我们分析一个系统是怎么做的 void launchHomeFromHotKey(final boolean awakenFromDreams, final boolean respectKeyguard) { if (respectKeyguard) { if (isKeyguard原创 2017-05-16 00:14:00 · 3537 阅读 · 0 评论 -
Android PhoneWindowManager WindowManagerGlobal WindowManagerImpl的作用和关系
WindowManagerService作为Window和输入事件的管理中心,这个是很容易理解的,而IWindowManager 的proxy端就不那么好理解的了,和WindowManager有关的就有PhoneWindowManager、WindowManagerGlobal和WindowManagerImpl三个,下面我们来简单分析一下三者的作用和关系。1.PhoneWindowM原创 2017-05-16 22:38:55 · 4490 阅读 · 0 评论 -
Android 从源码分析BLE连接错误分析
项目中涉及低功耗蓝牙手柄的开发,GattCallback onConnectionStateChange接口返回状态status值有多个private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnection原创 2017-06-16 00:59:00 · 10932 阅读 · 4 评论 -
Android 状态机stateMachine的应用
研究Android源码发现很多状态机的应用,比如蓝牙,WiFi,事件处理等处,这些模块对于流程的要求很高,WiFi的连接到断开经历了一系列的操作 addState(mDefaultState); addState(mInitialState, mDefaultState); addState(mSupplicantStart原创 2017-06-24 02:30:05 · 1627 阅读 · 0 评论 -
Android与YunOS 启动时间分析
阿里最近发布了YunOS 6系统,该系统其中一大特性是开机速度变的更快,比相同配置的Android系统手机缩短了一半时间。YunOS 6通过对开机服务依赖流水线化,更细定义系统的服务关系;发挥多核并发优势,可以让并行的程序跑得更快;消除冗余开机服务等措施,实现了15秒闪电开机,与谷歌Android N相比,在同等配置的手机上,YunOS开机时间缩短了一半。粗略测试一下华为P9开原创 2017-06-14 17:05:47 · 1287 阅读 · 0 评论 -
Android 蓝牙强度Rssi
1.什么是RssiRSSI(接收信号强度)Received Signal Strength IndicatorRss=10logP,只需将接受到的信号功率P代入就是接收信号强度(灵敏度)。[例1] 如果发射功率P为1mw,折算为dBm后为0dBm。[例2] 对于40W的功率,按dBm单位进行折算后的值应为:10lg(40W/1mw)=10lg(40000)=10lg4+10原创 2017-06-14 18:23:28 · 16838 阅读 · 1 评论 -
Android Retrofit 2实现原理分析
1.Retrofit的原理是什么Retrofit是一个基于AOP思想,对RestfulApi注解进行动态代理的网络框架。2.AOP是什么Aspect Oriented Programming 面向切面编程。面向切片编程是编程实践中的解耦利器,能够极大的减少对象的创建,AOP的思想是在不影响主体逻辑的前提下,动态的插入逻辑,利用反射进行调用。在执行频度不是很高的原创 2017-07-20 10:18:37 · 4541 阅读 · 0 评论 -
Android RxJava原理分析
团队并行开发,每个人对自己模块的api进行封装,然后利用Retrofit的create方法创建出对应的apiservice进行网络请求,各个模块都需要含有apiservice实例的简单单例封装,那么多个模块就有多个单例,这个时候就需要工厂模式进行设计。原创 2017-07-19 00:16:58 · 3638 阅读 · 0 评论 -
Android studio 阅读Android源码
window环境下source insight 3工具是相当好用,但mac x10之后没有mac版可用了,无奈卸载了,好在现在Android源码考虑到了开发者的便捷,已经可以支持Eclipse阅读源码了。下面我们介绍如何使用Android studio加载Android源码。我采用的源码是Android 7.1.1的,在源码目录下development/ide/eclipse文件夹下,原创 2017-04-18 10:51:28 · 3195 阅读 · 1 评论 -
Android 获取蓝牙设备类型
之前我们分析了如何获取已连接的蓝牙设备地址http://blog.csdn.net/jasonwang18/article/details/61214431本篇我们分析如何获取对应蓝牙设备的类型,这个类型和profile不是同一个东西,而是具体蓝牙的设备类型,比如手机、电脑、手柄、蓝牙耳机等我们看到手机搜索到的蓝牙设备类型有三种,手机、电脑和普通蓝牙 /*原创 2017-04-17 16:55:38 · 12568 阅读 · 3 评论 -
Android pid uid 机制分析Permission Denial的错误
PID 指进程ID. PID是进程的身份标识,程序一旦运行,就会给应用分配一个独一无二的PID(ps:一个应用可能包含多个进程,每个进程有唯一的一个PID)进程终止后PID会被系统收回,再次打开应用,会重新分配一个PID(新进程的PID一般比之前的号要大)UID 指用户ID.UID在Linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的原创 2017-03-26 10:50:13 · 7480 阅读 · 0 评论 -
Android 源码分析AccessibilityService拦截VR眼镜Key事件以及key事件在View体系的传递
上一篇《Android AccessibilityService拦截不到VR眼镜BACK键分析》我们拦截VR返回键出现了问题,这一篇我们从源码中进行分析。《Android 源码分析鼠标事件传递》介绍了鼠标事件从底层到View的传递过程,那么我们直接从View的源码中分析原创 2017-02-27 16:25:38 · 1106 阅读 · 2 评论 -
Android 源码分析鼠标事件传递
google推出的carboard、daydream是没有usb接口的,调节全靠手机自身的sensor。而想gear vr这类VR眼镜是有USB接口的,眼镜内部是有sensor用户调节眼镜的,而且有触屏、返回键和音量调节键。是不是很像一个鼠标,咨询了硬件工程师,证明了我们的猜想。下面我们从设备输入的源头InputReader.cpp进行分析。InputManager::InputManager原创 2017-02-26 15:37:55 · 6127 阅读 · 1 评论 -
源码分析Android bindService与startService区别
android启动service,不管是bindService还是startService都不像activity那样复杂,需要创建activity的窗口,pause、resume activity等一系列生命周期操作,简单粗暴直奔ActivityManagerNative.getDefault().startService和bindService, 跟activity一样运用的是著名的binder原创 2017-02-13 00:46:17 · 676 阅读 · 0 评论 -
Android 6.0 修改系统权限分析(二)
Android 6.0中,除了危险权限不再在安装后授予,还有两个特殊权限:SYSTEM_ALERT_WINDOW(设置悬浮窗,进行一些黑科技)和WRITE_SETTINGS(修改系统设置)。这里我们来分析WRITE_SETTINGS权限。WRITE_SETTINGS权限官方API说明Note:If the app targets API level 23 or higher原创 2017-02-11 16:32:06 · 2723 阅读 · 0 评论 -
Android 6.0修改系统权限分析(一)
Android 6.0之后敏感权限默认是关闭的,必须显式的去请求这个权限。而在6.0之前,只要你在manifest里面声明过所需要的权限,安装之后默认是开启的,下面我们来分析一下遇到的问题。android:name="android.permission.WRITE_SETTINGS" />项目中需要写系统设置的权限,该权限可以设置音量,调节明暗,测试手机系统是Androi原创 2017-02-09 11:17:42 · 6452 阅读 · 1 评论 -
Android AccessibilityService源码分析
AccessibilityService首先你要继承AccessibilityService,你会被要求复写onKeyEvent、onIntercept、onAccessibilityEvent等方法。我们看这些方法在AccessibilityService中是如何实现的。public class AccessBackKeyService extends Accessibility原创 2017-02-25 20:16:55 · 3273 阅读 · 3 评论 -
Android 源码分析ANR
先普及一下基本知识:什么是ANRANR,是“Application Not Responding”的缩写,即“应用程序无响应”。在Android中,ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会监测应用程序的响应时间,如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现原创 2017-03-04 15:14:48 · 3824 阅读 · 1 评论 -
Android 源码分析runtime、虚拟机和process的关系
Android的四层架构图大家再熟悉不过了,对于虚拟机心中一直有些疑惑:1.第三层Android Runtime和LIBRARIES层到底什么关系?2.Android Runtime、虚拟机和process到底是什么关系?今天我们从Android 7.0源码进行分析。int main(int argc, char* const argv[]){ if (prctl原创 2017-03-06 23:10:40 · 2554 阅读 · 2 评论 -
Android 如何获取已连接的蓝牙地址
项目中有一个需求,就是获取已连接的蓝牙地址private void getConnectBt() { LogUtil.i("getConnectBt"); int a2dp = _bluetoothAdapter.getProfileConnectionState(BluetoothProfile.A2DP); int headset = _b原创 2017-03-10 23:05:18 · 14220 阅读 · 5 评论 -
Android如何监听第三方应用的启动
个人总结的监听第三方应用启动的方法有以下几种:1.Root状态下监听ActivityManager的log2.参考程序锁的实现,监听后台运行的进程3.深入framework,通过反射等方式注入hook第一种方式监听应用的启动,restart都能监控到,不过这种方式限制很大,在最新的android版本中,再加上各手机厂商对于安全性的努力,使得Root变的很困难。第二种方式采用原创 2017-03-23 00:26:15 · 21238 阅读 · 1 评论 -
Android WiFi源码分析
让我们从最开始的enableWifi开始分析 public boolean enableNetwork(int netId, boolean disableOthers) { final boolean pin = disableOthers && mTargetSdkVersion < Build.VERSION_CODES.LOLLIPOP; if (原创 2017-03-14 22:28:44 · 4270 阅读 · 0 评论 -
Android 源码分析VR返回键无法用Accessibility拦截的问题
上一篇《Android 源码分析AccessibilityService拦截VR眼镜Key事件以及key事件在View体系的传递》我们分析到了系统对虚拟按键的BACK键和VR眼镜的BACK键处理是不同的。AccessibilityService很容易就拦截到了虚拟按键的BACK键(以下简称BACK),但始终拦截不到VR眼镜的BACK键(以下简称VBACK)。经过从源头InputReader.cpp原创 2017-02-28 16:11:11 · 1818 阅读 · 4 评论