framework
文章平均质量分 71
图王大胜
一名Android FWK程师;专注系统思维
展开
-
Android SystemUI组件(07)锁屏KeyguardViewMediator分析
说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分即可。:这是一个中介类,它负责管理锁屏的状态,包括锁屏的显示和隐藏,以及与锁屏相关的各种事件处理。它还负责在系统启动时初始化锁屏界面,并在设备准备好时启动锁屏。:这个类是锁屏服务的入口点,它接收来自系统其他部分的请求,如启动锁屏或结束锁屏动画。:负责管理状态栏中的锁屏视图,包括显示和隐藏锁屏界面。:监控系统的各种状态变化,如电池状态、时间变化等,并在这些变化发生时更新锁屏界面。:负责显示解锁界面,包括图案、PIN、密码等解锁方式。原创 2024-09-21 22:11:40 · 777 阅读 · 0 评论 -
Android SystemUI组件(05)状态栏-系统状态图标显示&管理
说明:本章节持续迭代之前章节的思维导图,主要关注下方 SystemBars分析中状态栏中的部分-系统状态图标显示&管理即可。原创 2024-09-10 00:11:18 · 1289 阅读 · 0 评论 -
Android Framework 常见解决方案(29)添加应用开发的共享库
通过设置配置文件public.libraries.txt以及在system分区下添加so动态库的方式,让系统扩展动态库。关于动态库的拷贝较为简单,直接配置即可,这里主要解读下配置文件public.libraries.txt。原创 2024-04-15 16:59:32 · 1928 阅读 · 0 评论 -
Android Framework 常见解决方案(28)system分区自定义方案
一般在定制系统时,都会做预置apk和各类其他资源,很有可能超出系统默认设置的系统分区大小,也就会导致编译system时因超出默认设置的分区大小而失败。一般的做法是修改android framework时,修改对应项目的BOARD_SYSTEMIMAGE_PARTITION_SIZE的值。BOARD_SYSTEMIMAGE_PARTITION_SIZE是在 Android 系统构建过程中使用的板级配置变量之一。它在 Android 框架中的主要作用是指定系统镜像(system partition)的大小。原创 2024-04-02 16:11:52 · 1599 阅读 · 0 评论 -
Android Framework 常见解决方案(26)user版本可root方案
User版本默认是没有root权限和remount功能的,一般该方法用于调试性能相关问题。如果使用debug版本对照,差异过大,因此就有了这样的需求。修改的核心原理就是调整adbd及相关属性中的一些判定,即user和debug版本的区别点入手。另外就是user版本中本身是没有remount的,需要单独添加才行。同时也需要修改should_drop_privileges的返回值以防止降低adbd进程的权限等限制。原创 2024-01-10 19:00:00 · 1376 阅读 · 0 评论 -
Android Framework 常见解决方案(25-1)定制CPUSET解决方案-framework部分修改
由于修改中涉及代码量过大,这里拆分成两节进行展示。本章节主要针对第1部分修改进行说明。下一篇文章主要对第2和第3部分修改进行说明。原创 2024-01-09 20:25:07 · 1470 阅读 · 0 评论 -
Android Framework 常见解决方案(25-2)定制CPUSET解决方案-system修改及编译部分调整
由于修改中涉及代码量过大,这里拆分成两节进行展示。本章节主要针对第2部分和第3部分修改进行说明。上一篇文章主要对第1部分修改进行说明。原创 2024-01-09 20:25:04 · 1348 阅读 · 0 评论 -
Android Framework 常见解决方案(24)屏蔽FallbackHome,去除 Android正在启动,直接进入Launcher
开机以后,设备会有一个“android正在启动”这样的弹框,这个界面是一个叫FallbackHome的Activity来展示的。FallbackHome机制是Android系统启动过程中的一种降级处理机制。当系统启动时,如果默认的Launcher应用无法正常加载或出现错误,系统会自动启用FallbackHome来替代默认Launcher。但一般为了改善产品体验,最终决定移除弹窗页面,直接进入默认的Launcher,避免弹窗对用户界面的干扰。原创 2023-11-01 17:34:37 · 3519 阅读 · 4 评论 -
Android Framework 常见解决方案(23)三方应用APP启动绑核setAffinity设置
一般来说这个需求主要是为了应用启动时设定绑核相关操作,但是如果没有三方应用的源码想要让其绑定再其他核心上就要修改framework源码了。framework源码修改的原理是:在zygote创建应用子进程(Fork操作)时做白名单处理,针对不同的应用APP进程进行可以有不同的绑核策略。关于Zygote的初始化以及创建APP进程的流程这里就不多说了,最终创建进程回调用到这里:com_android_internal_os_Zygote.cpp中的。原创 2023-10-12 21:23:46 · 656 阅读 · 0 评论 -
Android SurfaceFlinger导读(04)理解BufferQueue
说明:关于导读:导读部分主要是方便初学者理解SurfaceFlinger代码中的机制,为后面分析代码打下一个更好的基础,这样就可以把更多的精力放在surfaceFlinger的业务逻辑分析上。关于代码分支:以下代码分析均在android5.1.1_r3分支上 目录frameworks/native/services/surfaceflinger为root目录总之,理解这些概念是 Android 图形渲染和显示的关键,尤其是在处理图形性能和显示质量时。原创 2023-10-07 00:13:08 · 1139 阅读 · 0 评论 -
Android Framework 常见解决方案(22)防应用被LowMemoryKillerDaemon(LMKD)杀掉
LMKD 借助 Linux 内核的 OOM(Out of Memory)机制来管理内存。当系统内存不足时,OOM 触发器会发送信号给LMKD,通知其进行内存管理。LMKD根据预先定义的策略和优先级,选择性地终止一些进程,以释放内存。这里选择运行到第4步时进行进程终止过滤,即使用包名进行过滤。原创 2023-09-28 22:00:00 · 977 阅读 · 26 评论 -
Android Framework 常见解决方案(21)默认开启adb
文件 AOSP/frameworks/base/services/core/java/com/android/server/adb/AdbService.java。设置默认ADB Enable为真,android的user版本中也默认为真。在该文件的systemReady中修改。原创 2023-09-20 17:54:54 · 1418 阅读 · 2 评论 -
Android SurfaceFlinger导读(01) surfaceFlinger设计师
surfaceFlinger是一个名为Mathias Agopian的工程师编写的。作者Mathias Agopian有着BE和PalmSource的工作经历,于2006年加入了Android团队。他是一个晚睡晚起的人,常常很晚到公司,也很晚才离开。他是一个喜欢专注写代码而尽量避开所有会议的人。他是一个童年时期就学习电脑编程,并有所成就的人(曾为雅达利猎鹰开发图形和音频程序,并未计算机杂志撰写文章,后为Be开发了打印机驱动程序)。原创 2023-09-20 00:27:13 · 689 阅读 · 0 评论 -
Android GUI系统之SurfaceFlinger(02)应用端分析1-获取Surface
本章节思维导图如上。主要讲述了surafce测试程序 demo的 💰2步,获取SurfaceFlinger的客户端,进而获取 SurfaceControl,再获得Surface的过程。0 关键源码说明//...//1.1 创建surfaceflinger的客户端//1.2 获取surface//2 设置layer,layer值越大,显示层越靠前//3 获取buffer->锁定buffer->写入buffer->解锁并提交buffer//这里主要关注:申请Buff 和 提交Buff。原创 2020-03-14 12:19:25 · 3168 阅读 · 2 评论 -
Android SurfaceFlinger导读(03)理解MessageBase
/说明:以下代码分析均在android5.1.1_r3分支上 目录frameworks/native/services/surfaceflinger为root目录。原创 2023-09-11 23:54:30 · 598 阅读 · 0 评论 -
Android Framework 常见解决方案(20)UDP广播无效问题
该问题同时存在于androidApp和Framework系统中。最终效果是在Android系统中直接使用UDP广播无效,有意思的是有的android系统可以,有的Android 系统不行。然而该部分代码自己在Linux上测试时是有效的,代码不变,只是简单的编译移植过来就变得莫名其妙的不行了,头还真是大的不行。在移植到android的过程中实际上是使用android走JNI调用C++的方式来使用,这里就不详述了。最后分析,发现,果然是android的问题。原创 2023-08-19 09:56:22 · 1296 阅读 · 0 评论 -
Android Framework 常见解决方案(18)开机启动并设置默认输入法
在aosp/frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加。在aosp/frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加。可以根据自己的实际情况调整脚本内容。原创 2023-04-07 19:02:37 · 984 阅读 · 5 评论 -
android系统核心机制 基础(10)Ashmem匿名共享内存机制
1 Ashmem匿名共享内存机制 简介Ashmem是一种匿名共享内存机制,主要用于进程间大量传递数据。1.1 为什么要有Ashmem匿名共享内存机制?Android系统已经添加了Binder这个高效的跨进程通信的机制,那为什么还要搞一个Ashmem 匿名共享内存机制呢?因为binder机制主要用于进程间的通信,适合进程间的方法调用(A进程的X方法调用B进程的Y方法),但如果进程间需要传输大量数据则并不可行,关于binder传递数据的限制我们可以看Binder初始化时的宏定义($AOSP/fr原创 2022-03-03 16:07:47 · 4018 阅读 · 0 评论 -
Android系统基础(01)简介
1 Android基本架构概述一共是Application | framework | (HAL&&Dalvik/ART) | (Kernel&&Driver) 四层,经典架构图如下: Android四层的含义分别如下:APP:该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者...原创 2020-03-21 16:02:42 · 1327 阅读 · 0 评论 -
Android Framework 常见解决方案(17)Broadcast调起输入法界面并实现文本传输的方法
收广播,在android framework层需要修改InputMethodService.java,文件对应的具体路径为:$AOSP/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java。原创 2022-02-10 13:10:30 · 1584 阅读 · 1 评论 -
android 系统核心机制binder(14)binder调试总结
该系列文章总纲链接:专题分纲目录 android 系统核心机制 binder1binder调试基础解读1.1binder的设备节点简单解读binder调试相关的设备节点再目录/sys/kernel/debug/binder目录下,节点内容如下所示:这里可以看到binder下所有通信进程信息,打开后cat 其中一个,内容如下所示:这里包含了该进程中binder相关内容,比如:Binder线程池(thread)、实体对象(binder_node)、引用对象(binder_ref)..原创 2022-01-07 17:20:53 · 4742 阅读 · 1 评论 -
Android Framework 常见解决方案(16)android多VirtualDisplay交互方法
1 原理该文主要介绍了 AR多窗口辅助屏实现的解决方案。该方案涉及的关键技术解决方案有:多辅助屏显示 方法(展示) 在应用层即可实现 系统输入事件到 多个辅助屏的解方法和解决焦点问题(展示) 坐标转换算法与参数调整和适配方案(未展示) Unity中显示android中辅助屏内容并显示(未展示) Unity中API可调用到android framework中自定义API以及隐藏API方案(未展示) Unity-APP-Android Framework-BSP整体性能优化显示方案(未展示..原创 2022-01-05 13:05:49 · 6838 阅读 · 29 评论 -
Android SystemUI组件(04)状态栏-Notification显示&管理
该系列文章总纲链接:专题分纲目录 Android SystemUI组件本章关键点总结 & 说明:说明:本章节持续迭代之前章节的思维导图,主要关注下方 SystemBars分析中状态栏中的Notification部分即可。1Notification在APP中的常见流程一般来说,APP中通知状态栏的流程如下所示:NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SE.原创 2021-06-24 13:58:23 · 2544 阅读 · 0 评论 -
Android SystemUI组件(03)状态栏-创建分析
该系列文章总纲链接:专题分纲目录 Android SystemUI组件本章关键点总结 & 说明:说明:本章节持续迭代之前章节的思维导图,主要关注下方 SystemBars分析中状态栏的创建部分即可。原创 2021-06-24 12:51:52 · 1152 阅读 · 2 评论 -
Android SystemUI组件(06)导航栏创建分析&虚拟按键
说明:本章节持续迭代之前章节的思维导图,主要关注左侧SystemBars分析中导航栏部分即可。原创 2024-09-10 00:29:19 · 1313 阅读 · 0 评论 -
Android SystemUI组件(02)SystemBars分析
该系列文章总纲链接:专题分纲目录 Android SystemUI组件本章关键点总结 & 说明:说明:本章节持续迭代之前章节的思维导图,主要关注下方 SystemBars分析部分即可。主要解读了SystemBars的启动流程以及如何调用到 状态栏和导航栏的创建函数。1 SystemBars start 启动分析分析SystemBars的start方法,代码实现如下:public class SystemBars extends SystemUI implements Ser原创 2021-06-19 16:05:50 · 726 阅读 · 0 评论 -
Android SystemUI组件(01)SystemUIService启动
1 SystemUIService启动SystemUI是Android2 SystemUI 体系结构总结原创 2021-06-19 16:05:46 · 1003 阅读 · 0 评论 -
Android Framework 常见解决方案(15)android内置可卸载APP集成方案
1 原理在Android源码中添加一个可卸载APP的普通应用,该应用是 需要一个用于集成的apk文件、Android.mk文件 以及相关的配置文件。和系统级应用集成不同的是LOCAL_CERTIFICATE变量值的不同,系统级应用对应的是platform,而普通可卸载应用对应的是PRESIGNED。2 修改方案(Android O P Q)在AOSP/package/apps/路径下 添加一个普通可卸载应用Taobao.,添加对应的Android.mk文件,如下所示:LOCAL_PATH.原创 2021-03-17 13:46:20 · 2906 阅读 · 9 评论 -
Android Framework 常见解决方案(14)修改默认usb连接模式为MTP模式
1 原理Android Q:找到UsbDeviceManager,这里在finishBoot(也就是启动后)设置usb模式为 MTP模式,同时在处理消息时如果为默认模式NONE则将其更改为MTP模式。2 修改方案修改文件为:frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java,修改内容为: //1 消息处理部分 public void handleMess.原创 2021-03-08 14:54:36 · 1703 阅读 · 1 评论 -
Android Framework 常见解决方案(13)默认休眠时间修改 解决方案
1 原理在SettingsProvider中进行 默认选项的配置2 解决方案(Android O P Q)在文件 frameworks/base/packages/SettingsProvider/res/values/defaults.xml 中做如下修改: <resources> <bool name="def_dim_screen">true</bool>- <integer name="def_screen_off_tim原创 2021-02-03 15:08:23 · 1386 阅读 · 0 评论 -
Android Framework 常见解决方案(12)生成系统签名 & 安卓源码编译自定义SDK android.jar
1 原理主要是在Android OS中建立文件夹,通过脚本生成对应的platform.keystore的过程。 编译出android.jar 这个jar包可以用于替换Android Studio中的相应文件,这样就可以使用Android Framework中自己实现的服务接口了。2 修改方案(Android O P Q)@1 生成系统签名在文件夹build/make/target/product/security中建立一个新的目录 make_platformkey。拷贝build/ma.原创 2021-02-03 11:43:57 · 1843 阅读 · 1 评论 -
Android Framework 常见解决方案(11)关闭View Full Screen弹窗
1 原理修改方案:Android O:在PhoneWindowManager中找到可以添加白名单的地方,直接屏蔽即可。 Android Q:主要就是找到其对应的handler,对于显示部分压根不允许其给主进程发送消息。2 修改方案对话框显示为:2.1 不让view full screen弹出的解决方案(Android O)在文件frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManag原创 2021-02-03 11:43:31 · 1325 阅读 · 1 评论 -
Android Framework 常见解决方案(10)关闭蓝牙配对对话框 & 关闭蓝牙忘记设备对话框
1 原理在Android 系统应用Setting中做相关的修改,主要逻辑为:不弹出对话框,但 会直接执行点击确定后的逻辑,所以具体的方式就是 先找到配对对话框/忘记设备对话框 执行确定的逻辑,将其移植到Setting中探出对话框的位置。2 修改方案(Android Q)2.1 关闭蓝牙配对对话框修改文件位置为:AOSP/packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothPairingRequest.java文原创 2021-02-02 18:35:08 · 1825 阅读 · 1 评论 -
Android Framework 常见解决方案(09)bootanimation详细流程总结
1 bootanimation的文件分布于解读1.1 desc.txt文件说明desc.txt文件是一个配置文件由若干行组成,每一行代表一种描述。下面以一个具体的例子为例,具体说明: 1080 1920 20 p 1 0 folder1 p 2 20 folder2 c 0 0 folder3 c 1 0 folder4第1行用来描述开机动画在屏幕显示的大小及速度。具体为:开机动画的宽度为1080个像素,高度为1920个像素,显示频率为每秒20帧,即每帧显示1/20秒。从第2行原创 2020-09-27 12:29:03 · 2060 阅读 · 0 评论 -
Android Framework 常见解决方案(07)Android开机启动 Native daemon 解决方案
1 原理主要 修改系统编译配置文件,rc文件,SELinux相关文件。2 解决方案@1 创建工程和 rc配置文件创建一个新的目录frameworks/native/services/surfaceflinger/spaceXA(这里只是举例,实际上可以根据实际情况 进行调整),主要是建立一个新的工程并有自己的Android.mk文件。在文件 frameworks/native/services/surfaceflinger/surfaceflinger.rc(这里只是举例,实际上可以根.原创 2020-09-26 08:41:41 · 1009 阅读 · 0 评论 -
Android Framework 常见解决方案(08)Android 禁止各种权限弹窗 解决方案
1 原理在弹窗的位置上修改代码 或者是直接授权,不让弹窗弹出来。2 解决方案@1 不让view screen弹出的解决方案在文件frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java中做如下修改:@@ -1854,6 +1854,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { .原创 2020-09-26 08:41:45 · 2978 阅读 · 0 评论 -
Android Framework 常见解决方案(06)input命令 模拟鼠标滚轮 解决方案
1 原理通过input的inject方法对MotionEvent事件进行下发。2 解决方案在文件 frameworks/base/cmds/input/src/com/android/commands/input/Input.java 中做如下修改:@@ -145,7 +145,19 @@ public class Input { Float.parseFloat(args[index+2]));原创 2020-09-26 08:41:38 · 959 阅读 · 0 评论 -
Android Framework 常见解决方案(05)Android默认所有应用横屏 解决方案
1 原理屏幕 旋转的配置进行 锁屏,通过修改PhoneWindowManager.java 来实现。2 解决方案在文件 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 中做如下修改:@@ -2252,6 +2252,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { ...原创 2020-09-26 08:41:34 · 1015 阅读 · 0 评论 -
Android Framework 常见解决方案(04)禁止锁屏 解决方案
1 原理在SettingsProvider中进行 默认选项的配置2 解决方案在文件 frameworks/base/packages/SettingsProvider/res/values/defaults.xml 中做如下修改: <string name="def_trusted_sound" translatable="false">/system/media/audio/ui/Trusted.ogg</string> <string n...原创 2020-09-26 08:41:31 · 984 阅读 · 2 评论 -
Android Framework 常见解决方案(03)android系统 资源文件添加
1 原理主要是以 系统编译 和配置为主。2 解决方案这里以在系统中构建一个新的资源:system/etc/cursor.png为例 进行说明创建文件 frameworks/base/data/etc/cursor.png,并修改文件frameworks/base/data/etc/Android.mk,文件修改如下:@@ -39,3 +39,12 @@ LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/p原创 2020-09-26 08:41:28 · 1006 阅读 · 0 评论