
framework
文章平均质量分 92
mockingbirds
这个作者很懒,什么都没留下…
展开
-
Activity启动流程
从今天开始,正式开始framework学习,深入理解和记录学习framework的相关笔记。好了废话不多说,android开发中常用的api有很多,今天我们从一个startActivity说起,记录activity的启动流程,能力有限,若有不对的地方,敬请大伙指教,提前谢过。 ActivityManagerService和ActivityStack位于同一个进程中,而ApplicationThr原创 2016-11-04 22:16:10 · 3011 阅读 · 0 评论 -
wifi连接流程
在平时的android开发中,经常会用到wifi相关操作,其实就应用而言,系统都是通过WifiManager对应的api来进行对应的操作 我们可以从源码的frameworks/base/api目录中看到当前系统提供的所有apipublic class WifiManager { method public int addNetwork(android.net.wifi.WifiConfig原创 2016-11-27 22:05:12 · 5819 阅读 · 0 评论 -
Android中实现快速搜索
本篇博文基于Android N源代码为参考 从android5.1 开始,google为用户提供了一种很方便的搜索功能,用户可以很方便的在settings中搜索setting里或者系统其他配置了指定继承自SearchIndexablesProvider的应用的设置选项,这样做极大的提高了搜索效率SearchIndexablesProvider简介SearchIndexablesProvider原创 2016-12-16 23:04:56 · 8214 阅读 · 1 评论 -
Android上hook AMS和PMS
好吧,我承认,其实这一篇文章,主要使用到的就是动态代理,但是个人觉得还是有很大意义的,比如说可以降低代码耦合度,如果想在用户的某一类操作都要打印log获取当前参数,或者是记录用户的点击事件,点击时间等,那么此时在现有代码的基础上每次在点击事件中做处理,肯定是可以的,但是这样,我们要修改多少代码,其实此时,我们就可以完全使用代理来实现类似的功能。说道这里了,就先来看看,什么是代理吧静态代理比如,现在原创 2017-01-02 10:39:59 · 5096 阅读 · 1 评论 -
Android中实现so注入进程
这篇博客主要实现将so文件注入到进程中,并且在被注入的进程中执行so文件中的方法,先说下环境使用的是4.4的模拟器,嘻嘻.,参考 Android中的so注入,我只是整合了这些资源,并将其run起来,感谢作者提供的文件和思路先说下大概的实现思路吧: 1. 创建so文件所在进程的应用,创建c文件,并使用ndk-build编译出可执行so文件 2. 创建执行so文件所在进程应用,创建c文件,在mai原创 2017-01-03 22:01:29 · 8883 阅读 · 5 评论 -
Android系统实现navigationbar订制
今天给大家带来一个有趣的实验,基于android N原生代码,实现动态显示和隐藏navigationbar的功能,先说下实现思路,在SettingsProvider中增加一个”show_navigation_bar”字段,用来存储当前是否显示和隐藏navigationbar的值在Settings中增加一个SwitchPreference,并且设置setOnPreferenceChangeList原创 2017-01-26 08:53:01 · 12048 阅读 · 10 评论 -
亲测可用Android原生代码添加系统服务
在Android系统中,为我们提供了很多的系统服务,比如AMS,PMS等,今天参考系统里其他服务的实现,在Android N原生代码中添加自己定制的服务,想想都满激动的准备工作在正式开始之前,需要知道下面两点以及满足下面条件:前提条件 Android原生代码,可以通过make全编通过,编译完成之后,可以通过emulator命令启动out目录下生成的image文件,需要注意在执行emulator原创 2017-01-12 21:55:56 · 9652 阅读 · 6 评论 -
android源码预置apk
本次实践基于android N原生代码,其实没有多大卵用,因为基本每个ROM厂商都有自己的定制方式,但话又说回来,会了总归是好的。这里我们可以预置包含源码的应用,也可以直接预置第三方apk增加有源码的应用Precondition删除bin目录和gen目录需要注意,由于android编译的时候,强制检查语言适配,所以,不能直接在布局中使用字符串,而是需要将其写入到strings.xml文件中,然原创 2017-01-22 22:14:32 · 6186 阅读 · 0 评论 -
最近总结的Android笔记(三)
android系统增加framework服务在 frameworks/base/core/java/android/os目录中增加对应的aidl文件在frameworks/base/Android.mk文件中增加定义的aidl文件 LOCAL_SRC_FILES +=mmm frameworks/base 此时会自动根据aidl文件生成对应的stub接口在frameworks/base/原创 2016-12-30 21:51:34 · 3952 阅读 · 2 评论 -
Android StateMachine学习
2018年01月06日14:33:58,西安下了三天的大雪了,上班上学上街都不方便,索性在家看看代码吧,已经好久没有更新博客了,是因为之前的笔记本配置实在跟不上了,2018年元旦,狠下心来新买了一个某米的笔记本,除了存储256G不够使用(单单下载一套Android代码,编译的时候就没有空间了,可怜的只剩下40M了,只是中通快递很不给力,扩展的硬盘还在路上。。。。。)废话不多说了,下面进入正题此次关原创 2018-01-06 20:05:22 · 5011 阅读 · 1 评论 -
WiFi的打开流程
上一篇学习了StateMachine原理,在此基础上,继续分析系统Wifi相关服务的开启流程,以及wifi的打开流程,下面开始Wifi相关服务的启动我们都知道每次系统开机以后,默认wifi相关的功能都可以使用了,那么肯定有在系统启动的时候,有启动wifi相关的服务,是在SystemServer中启动的,如下: 以上,WIFI_SERVICE_CLASS是WifiService的全类名priv原创 2018-01-07 15:06:27 · 4167 阅读 · 0 评论 -
Android O版本power按键锁屏亮屏流程
今天记录下跟踪的Android O版本,power键按下流程,包括关机,锁屏,亮屏流程,没有太多新的扩展,只是做了源码流程的记录分析,若有异议,欢迎提出,下面开始power按键传递对于按下power按键,在fwk中首先会传递到PhoneWindowManager#dispatchUnhandledKey@Overridepublic KeyEvent dispatchUnha...原创 2018-02-19 13:44:10 · 7225 阅读 · 1 评论 -
SystemUI流程分析
在前面的Android中getSystemService流程中,我们知道在系统启动的时候,会启动一些系统的必要服务,SystemUI也是在SystemServer#startOtherServices这里启动的SystemUI启动时机static final void startSystemUi(Context context, WindowManagerService windowM...原创 2018-02-19 14:10:59 · 1891 阅读 · 0 评论 -
Ubuntu16.04编译Android8.0系统源码
源码下载源码下载请参考下面链接 清华大学镜像站安装openjdk$ sudo apt-get update$ sudo apt-get install openjdk-8-jdk$ sudo apt-get install openjdk-8-jre安装编译依赖的库文件首先需要更新软件源,这里使用阿里源编辑如下文件:sudo gedit /etc/apt/...原创 2018-01-28 18:11:09 · 10680 阅读 · 0 评论 -
Android耳机拔插事件流程
Android所有的input设备都会在/dev/input目录下生成对应的设备节点,一旦有任何输入事件产生,便会将事件写到这些节点下,同时对于外部输入设备(鼠标键盘等)的插拔还会引起这些节点的创建和删除 使用adb 命令可以查看当前手机插入的耳机状态,命令为:adb shell cat /sys/class/switch/h2w/state原创 2018-05-12 18:00:34 · 4368 阅读 · 0 评论 -
android拨号流程
今天学习”android中的拨号流程”,大部分情况,用户是通过dialer输入号码,拨号通话的,那么就从dialer开始吧。DialpadFragmentDialpadFragment是拨打电话界面,当点击拨打电话按钮会回调其onClick方法:public void onClick(View view) { switch (view.getId()) { c原创 2016-12-06 22:10:14 · 5308 阅读 · 0 评论 -
Toast流程跟踪
构造一个Toast看下makeText方法public static Toast makeText(Context context, CharSequence text, @Duration int duration) { Toast result = new Toast(context); LayoutInflater inflate = (LayoutInflate原创 2016-11-22 21:33:31 · 2929 阅读 · 0 评论 -
Android中getSystemService流程
在平时的android开发中,我们经常会通过Context来获取系统服务,比如ActivityManagerService,AccountManagerService等系统服务,今天我们就来看下getSystemService(String name)的整个调用流程。找到Context的实现类打开Context类,可以看到Context是一个抽象类,那么getSystemService一定是在其实现原创 2016-11-05 22:04:37 · 13639 阅读 · 1 评论 -
Android中APK的安装流程
这篇文章,来学习apk的安装流程,在开始之前,先看看我们在APP中是通过下面代码来安装apk的Intent intent = new Intent(Intent.ACTION_VIEW);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(Uri.parse("file://" + path),"applica原创 2016-11-07 22:34:46 · 8599 阅读 · 1 评论 -
setContentView那些事
刨根问底setContentView在平时的android开发中,经常会使用到Activity#setContentView方法来设置我们自己的布局,那么setContentView中到底做了什么,我们的布局 是怎么加载并显示到手机屏幕上的,这就是今天要讨论的内容,看下Activity#setContentView方法public void setContentView(@LayoutRes in原创 2016-11-08 20:44:07 · 2624 阅读 · 0 评论 -
Android中广播注册与接收流程
当我们通过registerReceiver注册广播的时候,其实是使用的Context来注册的,前面”activity启动流程”,我们已经知道Context的实现类是ContextImpl,所以广播的注册是从ContextImpl中开始的广播的注册流程@Overridepublic Intent registerReceiver(BroadcastReceiver receiver, IntentF原创 2016-11-11 22:20:16 · 2663 阅读 · 0 评论 -
Service启动流程
startService流程@Overridepublic ComponentName startService(Intent service) { warnIfCallingFromSystemProcess(); return startServiceCommon(service, mUser);}private ComponentName startSer原创 2016-11-11 22:35:46 · 2545 阅读 · 0 评论 -
Android屏幕亮度调节
平时通过一个slider调节改变屏幕亮度,其实这个slider是systemui的东西,叫做BrightnessDialogpublic class BrightnessDialog extends Activity { .... private BrightnessController mBrightnessController; @Override prote原创 2016-11-15 22:19:38 · 3743 阅读 · 4 评论 -
深入理解LayoutInflater
探究LayoutInflater的实现类##在android程序员写代码的时候,很多时候会用到LayoutInflater来加载指定的布局:LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);// 或者通过from(Context co原创 2016-11-12 22:38:02 · 4128 阅读 · 0 评论 -
WindowManagerService添加View流程
我们都知道在android中所有的界面显示相关的,都是通过WindowManager.addView方法来将当前需要显示的View添加到window中。Window与WindowManager之间的关系WindowManager的实现类就是WindowManagerImpl:@Overridepublic void addView(@NonNull View view, @NonNull View原创 2016-11-13 21:44:40 · 3853 阅读 · 1 评论 -
Intent的匹配与查找
PMS解析已安装的apk信息在Android中getSystemService流程一文中,我们知道系统在启动的时候 会加载系统Service,比如ActivityManagerService,PackageManagerService等, PMS启动以后,会扫描系统中所有已安装apk的目录,比如系统 应用”/system/app”,第三方应用”/data/app”,PMS会解析该包下的所有And原创 2016-11-14 21:44:03 · 1635 阅读 · 0 评论 -
Android中APN的创建流程
APN全称是Access Point Name,是手机上网必须要配置的一个参数,用来决定手机是通过哪一种接入方式来访问网络,若APN缺少,4G、3G等移动网络异常!从ApnSettings开始,当点击新建apn的时候,回调onOptionsItemSelected方法@Overridepublic boolean onOptionsItemSelected(MenuItem item) {原创 2016-11-20 16:03:02 · 8014 阅读 · 1 评论 -
ContentProvider的工作过程
ContentProvider是一种共享型组件,它通过Binder向其他组件或者其他应用程序提供数据,当ContentProvider所在进程启动时候,ContentProvider会被 同时启动并被发布到AMS中,需要注意的是:ContentProvider的onCreate要优先于Application的onCreate而执行。ContentProvider的初始化过程Applicati原创 2016-11-20 10:05:54 · 3910 阅读 · 0 评论 -
View的相关总结
View的绘制流程View的绘制流程是从ViewRootImpl#performTraversals方法开始的,在performTraversals中会分别通过performMeasure,performLayout,performDraw这三个方法来绘制一个View 具体可以参考setContentView那些事 measure: 用来测量当前View的宽度和高度layout: 用来确定原创 2016-11-21 22:08:18 · 770 阅读 · 0 评论 -
短信的发送流程
在android中,google为开发者提供了一个SmsManager用来管理发送和接收短信的类,类似于WifiManager,先看下SmsManager的常用APISmsManager常用APImethod public java.util.ArrayList<java.lang.String> divideMessage(java.lang.String);一条短信只可容纳70个中文,所以当短信原创 2016-12-04 11:26:54 · 5799 阅读 · 0 评论 -
短信的接收流程
从RIL开始从RIL开始,前面的分析已经知道发送短信在framework层最终是通过RILSender来进行的,接收短信也是从RIL的内部类RILReceiver开始的class RILReceiver implements Runnable { byte[] buffer; RILReceiver() { buffer = new byte[RIL_MAX_原创 2016-12-04 12:52:25 · 3431 阅读 · 0 评论 -
Android事件传递流程
启动服务在系统启动时候,会启动多个服务,其中包括InputManagerServiceinputManager = new InputManagerService(context);看看InputManagerService构造方法public InputManagerService(Context context) { this.mContext = co...原创 2018-05-19 17:49:41 · 1087 阅读 · 0 评论