
framework
文章平均质量分 82
锐湃
这个作者很懒,什么都没留下…
展开
-
一文看懂DecorView的一生
DecorView的主要角色是作为顶层容器,承载着应用的视图结构。当在应用中使用setContentView方法加载布局时,实际上是将这个布局作为子视图添加到DecorView中。因此,DecorView定义了应用界面的边界,所有的视图都在这个边界内进行绘制和事件分发。下面我们来说一下,DecorView与Window、Activity和ViewRootImpl之间的关系,这能够更好地帮助我们理解应用的视图层次结构。最后,总结一下,整个流程主要可以归纳为四步:在Activity的attach()转载 2024-09-06 10:21:07 · 507 阅读 · 0 评论 -
Android 15 线程挂起超时崩溃与修复
本文同样梳理了一下Android 15在线程挂起流程的变更,看来每次升级都要绞尽脑汁想想hook方案,不过找到方案那一刻还是蛮开心的。此次方案不一定最优解,因为这个循环等待操作不知道会不会带来ANR风险,或者影响卡顿率指标等等,但是还是那句话避免Crash优先级更高。同样,其实我们应用如果像拼多多整体流畅度高性能好,其实间接也不需要这种hook,这个只是没办法而为之。Android 15 线程挂起超时崩溃与修复作者:巴黎没有摩天轮。转载 2024-08-23 11:24:01 · 355 阅读 · 0 评论 -
从 XML 到 View 显示在屏幕上,都发生了什么?
View绘制可以说是Android开发的必备技能,但是关于View绘制的的知识点也有些繁杂。如果我们从头开始阅读源码,往往千头万绪,抓不住要领。目前当我们写页面时,布局都是写在XML布局从XML到显示到屏幕上,都发生了什么,可以分为哪几个部分?我们将整个显示流程分解为以下几个部分代码是怎么从XML转换成View的?View是怎么添加到页面上的?在内存中View到底是怎么绘制的?View绘制完成后是怎么显示到屏幕上的?从XML到View显示到屏幕上主要涉及到以下知识点Activity。转载 2024-08-23 11:17:00 · 138 阅读 · 0 评论 -
Android面试又因为Handler机制而被淘汰了之聊聊同步屏障
在Android 官方开发者网站的参考手册中,有一段关于这个方法的说明,算是简单的介绍了一下同步屏障[1]LooperLooper大体意思就是:在View绘制时,会在Looper中使用同步屏障,来确保在view下一帧绘制完之前其他同步消息都暂不处理。这里重点看第三段,这段第一句话说的很清楚:异步消息不受同步屏障限制。得,看完这个,感觉更迷茫了。不过既然说了是在Looper中会用到同步屏障,那么就看看Looper中在哪里用到了。转载 2024-08-23 11:06:50 · 84 阅读 · 0 评论 -
内存大户Bitmap
阅读到这里,我们总结几个有用的结论:• Android Bitmap 内存占用和图片的尺寸,质量强相关,日常治理大图的时候要对这些参数适当做降级方案。• Android8以下图片分配在 Java 堆内,容易 OOM,可以通过一些 hook 方案把内存移到堆外。并且虽然 Bitmap 有自己兜底的内存释放机制,但是主动及时调用 recycle也不是坏事。转载 2024-08-20 10:42:35 · 110 阅读 · 0 评论 -
值得一看的Android广播分析好文
广播会发送到广播队列中不同集合。其中广播队列有三种类型,分别对应优先级从高到底:前台、后台、长广播队列类型。而广播又分三种:黏性广播、无序广播、有序广播。无序广播和有序广播的处理主要要发送广播的时候,而黏性广播则在广播接收者注册时候被处理。一个应用程序允许注册最大的广播接收者是1000个。广播之间的传递也要经历各种权限检查,所以广播不适合在应用间用于频繁的交互。值得一看的Android广播分析好文作者:新小梦链接:https://juejin.cn/post/7322156751818522661。转载 2024-08-09 10:19:51 · 76 阅读 · 0 评论 -
Android hide api反射方案合集
这次梳理了常见Android9之后的反射hide api的方案,通过这次学习,梳理了场景的方案的方向和思路。一方面我们需要做到理解Android限制我们调用hide api的原理,在真正需要这个方案的时候更好的做出选择,另一方面,我们也应该认识到Google设置这个规则的目的,那就是不到万不得已的时候不要随意去反射hide api,以免给app带来稳定性和安全性的问题。• 《一种绕过Android P对非SDK接口限制的简单方法》• 《另一种绕过 Android P以上非公开API限制的办法》转载 2024-07-26 15:44:11 · 344 阅读 · 0 评论 -
Resource那些事,看这篇就行
关于 Resource.getx() 相关的底层实现到这里就分析结束了。本篇中,我们以Kotlin+[裁枝剪叶]的方式,提供一个较清晰的脉络,以供更好的读懂应用层源码设计,关于更细节的原生实现,并不是本篇所关注的。所谓一眼入森,而不在林,正是如此。现在让我们反推上去:.xml结尾的,ColorDrawable 或者 非ColorDrawable;非.xml结尾的,即为 BitmapDrawable。那他们又是怎么判断得出的呢?转载 2024-07-25 10:04:16 · 101 阅读 · 0 评论 -
Activity Deeplink启动来源获取源码分析
mReferrer很容易通过重写context的getBasePackageName()被伪造,在使用时一定要小心。通过ActivityManageService获取的Uid是无法被伪造的,可以考虑使用Uid来转换PackageName。作者:vivo互联网技术链接:https://juejin.cn/post/7030977861691375629来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-07-12 10:30:14 · 163 阅读 · 0 评论 -
在Activity中获取调用者包名,以及如何通过伪造mReferrerr让Activity无法获取调用者的包名
但是在Activity中,我们是无法touch到Binder线程的。如果这个值是SystemServer中填充的,然后发送到App中的,那么可以认为无法伪造,但是如果这个值依赖于调用者的传入,那么很可能可以被伪造。可以看到,我们调用startActivity的时候,并没有传入callingPackage参数,但是当调到ActivityManagerService的startActivityAsUser方法的时候,却出现了callingPackage参数,所以,肯定是调用流程中间的某一步,加入了这个参数。转载 2024-07-12 10:23:08 · 380 阅读 · 0 评论 -
探索AOSP(Framework)中的RRO:运行时资源覆盖的奥秘
运行时资源覆盖(RRO)是一种允许开发者和设备制造商在运行时动态修改Android应用程序资源的技术。这些资源包括XML布局、图像、样式等,它们共同构成了任何Android应用程序的用户界面和外观。通过RRO,可以在不修改原始资源的情况下定制应用程序的UI组件。所有UI组件,包括上述的XML、布局、字符串、颜色、样式、主题、图像和图标(drawable),都存在于Android应用程序和框架源代码中的“res”文件夹中。这些资源都可以被RRO系统定制和覆盖。转载 2024-06-17 11:11:47 · 525 阅读 · 0 评论 -
Android 11 framework学习之热点 打开TetherManager
step15之后SoftApStateMachine状态机进入StartedState,进入enter,比较重要的是此时会设置一个默认600000ms(10min)的timeout超时机制,如果此时间段一直没有设备连接该AP,就会自动关闭AP。ActiveModeManager是SoftApManager的基类,实际调用到SoftApManager.start,状态机发送SoftApStateMachine.CMD_START消息。打开对应请求的功能,这里对应的应该是TETHERING_WIFI。转载 2024-06-17 10:11:07 · 670 阅读 · 0 评论 -
学不会Android显示系统?那是因为你还没有看过这篇文章
Android显示系统的内容,太大,太深了。内容之繁杂,让我很难只通过一篇文章,就介绍详尽。而我已经给自己立下了目标了,不能轻易退缩。因此,冥思苦想许久,决定本文将详细介绍以下几个角色的作用,以及相互配合的方式:SurfaceHALVSync多缓冲机制我将尽可能将细节描述清楚,但篇幅有限,我也会在必要之处做些简化。如若有疏漏或错误,还请不吝赐教。下面,用一幅图,概括这几个角色之间的合作关系这个图,对于你来说,或许太过庞大,也根本无法理解。但没有关系,这里的图只是希望你有一个大概的了解。转载 2024-05-20 15:20:43 · 334 阅读 · 0 评论 -
Apk安装之谜
前期准备阶段又划分为拷贝完整性验证解析apk提取native libs、版本号验证五步,每一步都在为后一步做准备。拷贝会把安装的apk拷贝到。完整性验证会对进行验证,如果修改过则停止安装,同时还会提取签名信息到对象,如果apk没有签名信息则会停止安装,对象会在后面的安装流程用到。解析apk会从的AndroidManifest中把包名、版本号、安装路径、是否是debug等信息提取出来放入对象,若解析中发生错误也会停止安装。提取native libs的时候会用到对象,会把中的so库提取到。转载 2024-04-30 18:02:00 · 221 阅读 · 0 评论 -
你应该掌握的Android窗口基础
其实这样的理解放到如今来看也不能说错,只是需要一个更准确的说法:Activity包含我们可见的界面,但是可见的界面不一定是Activity。Activity界面中的根View叫做DecorView,它是View的根布局,里面包含了我们定义的View树,当然也有状态栏和导航栏。ViewRootImpl不能看名字进行理解,它不是View,更不是根View,而是View树和WindowManager之间的连接者,负责View的测量、布局和绘制工作,是整个View系统里面非常重要的类。转载 2024-04-28 13:26:18 · 410 阅读 · 1 评论 -
系统native进程之我是installd进程
这是Android系统进程系列的第五篇文章,本文同样以自述的方式带您了解installd进程,通过本文您将了解到linstalld进程为啥存在?以及在安装/卸载apk中发挥了哪些作用。(文中的代码是基于android13Android系统native进程之我是init进程Android系统native进程之属性能力的设计魅力Android系统native进程之进程杀手--lmkdAndroid系统native进程之日志系统--logd、logcat上面提到的这些能力基本都是基于凭据加密 (CE) 存储空间。转载 2024-04-25 10:06:38 · 117 阅读 · 0 评论 -
一个可以查看各个Android版本源代码的完整网站
不好的点就是,好像没看到哪里有搜索文件的入口,这也就意味着,你得知道需要找的文件的路径。现在可以查看Android源码的网站应该有很多,这里分享前面几天看到的一个。比较好的一个点就是,Android历史的各个版本都能看到。各个Kerenel版本也是有的。转载 2024-03-18 14:26:44 · 225 阅读 · 0 评论 -
Android14 WMS AMS 窗口层级结构生成过程解析
我们从 DisplayContent 的构造函数出发,看一下这棵以 DisplayContent 为根节点的 DisplayArea 树是如何生成的。转载 2024-03-13 11:07:58 · 397 阅读 · 0 评论 -
Android Framework | AOSP源码下载及编译指南(基于Android13)
对于拿到了厂商AOSP源码来说,编译调试更容易了,一般厂商都提供了集成好的脚本,直接执行脚本就可以执行编译打包能力,例如Rockchip、高通、MTK等都有集成好的脚本进行编译打包。如何只是浏览查看AOSP源码,则没必要下载源码,可以使用google提供的Code Search工具进行浏览查阅,这个工具用起来堪比IDE,并且非常流畅,但是访问这个站点需要翻墙操作。AOSP的代码托管在Google的Git服务器上,但由于一些普遍已知的原因,国内用户无法直接访问。例如,如果您的计算机有4个核心,则可以使用。转载 2024-01-16 17:55:27 · 4543 阅读 · 0 评论 -
数10亿设备正在运行的开源项目AOSP
AOSP(Android 开源项目) 是与流行的智能手机系统 Android 一同运行的各种应用程序的基础。不同的手机制造商如三星、华为、索尼和谷歌,在基本的 Android 操作系统上添加了自己的定制功能和想法。AOSP 是一个开源的操作系统开发项目,由谷歌拥有和监督。任何人都可以自由地为 AOSP 贡献代码和修复程序,但谷歌负责整体方向和部分开发过程的管理。AOSP 定期获取适用于 Android 的最新错误修复和安全补丁。谷歌还在每年的 I/O 开发者大会上公布操作系统的关键新功能。转载 2024-01-12 13:40:02 · 304 阅读 · 0 评论 -
日志系统--logd、logcat
日志队列为了在有限的内存能够存放更多的日志:首先采用分而治之的办法,对日志进行了分类分为,每种类型的日志分别有自己的内存最大上限值,因为每种类型的日志使用了自己的内存上限值,那就可以保存更多的日志了;其次设计了具有压缩功能的日志队列,它可以对日志进行压缩,这样就能存储更多的日志了。日志队列日志收集中心日志分发中心它们三部分组成了日志收集分发中心。日志队列对日志进行了分类,同时还为了能够在有限的内存下存储更多的日志,设计了具有压缩功能的日志队列--;日志收集中心会启动一个名为logdw。转载 2023-12-22 10:40:07 · 884 阅读 · 0 评论 -
子线程刷UI->Barrier屏障->主线程装死->应用GG?太难了
大家好,本篇文章给大家分享一个困扰我多周的问题,为了这个问题真的是天天殚精竭虑、夜不能寐,幸好最终定位到了问题原因,接下来的内容干货满满,相信能对你有所帮助。转载 2023-12-21 16:00:20 · 214 阅读 · 0 评论 -
Android Telephony概览
供应商RIL实际上是Modem的软件代码,Modem硬件供应商提供与该Modem相对应的软件,以便硬件和供应商之间的通信能够顺利进行,数据可以轻松地从硬件传输到供应商RIL到较高层。我们知道我们的Android操作系统设备配置有多个网络功能,我们在日常生活中经常使用,如电话呼叫、短信、彩信、数据、SIM卡和其他网络功能。• 未被请求的命令:Modem首先向上层发送响应,而不是首先由应用层请求的响应,类似于首先接听电话、首先获取短信。一个软件模块或软件包,包含与电话相关的类和库,被称为电话框架。转载 2023-12-21 15:29:21 · 251 阅读 · 0 评论 -
init进程
首先需要给这个脚本语言起一个响亮的名字,就叫吧,接着需要制定脚本文件的后缀,javascript也是脚本语言,它的脚本文件是以'.js'为后缀的,那咱们的脚本文件就以‘.rc'作为后缀。既然名字和后缀制定好了,那就来制定语法规则吧。制定语法规则需要依据于咱们要解决啥问题,问题已经非常明确了:被创建子进程信息如何配置?可以把这个问题细化为下面4个步骤来解决此问题配置子进程基础信息:这一步主要用来配置子进程的基础信息,比如子进程的名字、可执行文件路径等,init进程就可以立马明白是哪个子进程被创建。转载 2023-12-15 14:20:04 · 67 阅读 · 0 评论 -
Android渲染系列之原理概述
本篇文章主要宏观整体的介绍Android是如何显示到屏幕上。转载 2023-11-24 16:16:10 · 221 阅读 · 0 评论 -
出海必经之路-GMS认证
GMS全称Google Mobile Service,谷歌移动服务。GMS认证是一项大工程,需要花费大量的人力(至少3人负责)、物力(标配:3台设备+3台主机)、财力(20万RMB左右)、时间(周期最低2个月),不建议新手去接手这件差事,最好是有老司机全程带着搞一遍。测试期间很轻松,基本不需要干啥,都是全自动化的,但是测试结束就有得忙了,随随便便成千上万个fail项就让人头皮发麻,所以,这个烫手山芋很多人都难以下咽,但作为一个合格的framework开发者,很有公司都要求有GMS认证的经验。转载 2023-11-16 14:08:36 · 3161 阅读 · 0 评论 -
手机做热点时 如何获取连过来设备的具体信息
系统id,不需取值/client mac地址/client ip地址/ client device name/加权后mac地址,也不需取值。1、连接过来的设备的信息存放在/data/misc/dhcp/dnsmasq.leases中。转载 2023-11-16 13:31:41 · 398 阅读 · 0 评论 -
为什么在Android中需要Context
在Android开发中,Context是一个非常重要的概念,但是很多开发者可能并不清楚它的真正含义以及为什么需要使用它。本文将详细介绍Context的概念,并解释为什么在Android应用中需要使用它。转载 2023-11-14 13:53:16 · 134 阅读 · 0 评论 -
Android自带dnsmasq作为init.rc里的service导致占用CPU一个核心
最近在Android系统里使用自带的dnsmasq来作为网口连接时的DHCP和DNS服务器,发现将其放至init.rc里作为service来启动,会占用CPU一个核心的资源(使用top命令会发现,单核CPU占100%,双核占50%,四核占25%),很怪异,发现ps命令里该项的WCHAN全为0,这个睡眠时用到的地址空间在内核态,永远睡不了啊,然后其状态一直是R,即一直处于运行状态。链接:https://www.jianshu.com/p/2e4087da8c08。转载 2023-11-14 13:49:15 · 289 阅读 · 0 评论 -
进程冻结机制
由于进程被冻结了,所以处理不了Input消息所以anr,由于进程被冻结了,所以anr的时候让进程去dump堆栈的请求也不会被处理。转载 2023-11-13 15:34:58 · 947 阅读 · 0 评论 -
下载和编译高通AOSP平台源码
我们将逐步讲解如何将高通vendor闭源模块拷贝到OpenSource对应目录下,并展示编译过程中的关键命令和修改代码的方法。1. 检查库文件版本匹配 在修改代码并重新编译时,需要注意系统内原始so库和自己编译的so库的版本应该相近。1. 下载特定基线的Manifest 如果您需要下载指定基线的源代码,请在上述命令中使用相应的Manifest文件名替换。请记住,定制化Android系统需要一定的开发经验和技能,并且可能需要详细了解高通AOSP源码的结构和相关文档。编译完成后,生成的产物将位于根目录下的。转载 2023-11-01 15:02:03 · 2487 阅读 · 1 评论 -
开启wifi热点,如何知道连接者有哪些
原文链接:https://blog.youkuaiyun.com/weixin_43278325/article/details/132209555。版权声明:本文为优快云博主「奶一口仙气」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。OK,那我们看看app侧如何得到这个,看这样的一个方法:registerSoftApCallback。至此,我们大致就可以得到连接上的Client信息了,这个信息主要就是对方的MAC地址。转载 2023-10-18 15:44:20 · 458 阅读 · 0 评论 -
android源码查阅连接
android源码查阅连接原创 2023-10-18 14:54:27 · 120 阅读 · 0 评论 -
使用Android的WiFiManager管理WiFi状态
通过使用Android的WiFiManager,我们可以轻松地管理设备的WiFi状态,包括打开/关闭WiFi、扫描可用网络和连接到指定网络。这为我们的移动体验增添了更多便利性。无论是在家中还是在外出,通过管理WiFi状态,我们能够更好地掌控我们的网络连接。希望这篇对你有所帮助!版权声明:本文为优快云博主「晋级的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。转载 2023-10-18 14:36:43 · 1241 阅读 · 0 评论 -
Android11 设置默认热点名称和热点密码、密码长度
热点默认名称和密码都是在 WifiApConfigStore 类中定义可以自定修改默认热点名称是 AndroidAP + 随机生成的1000-9999的数字默认热点密码是15位随机生成的数字/字母普通字符串版权声明:本文为优快云博主「峥嵘life」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/wenzhi20102321/article/details/127737534。转载 2023-10-18 14:19:37 · 2227 阅读 · 3 评论 -
Android wifi热点SoftAP使用方式
的,那么只能通过反射才可以,当然还需要项目具有系统权限,正好我们的APP是系统级APP已经具有了系统权限。方法可以发现高版本的比低版本兼容的代码越多,那我直接在本地自己按照最高版本的实现去实现不就解决所有版本了。需要获取SoftAP频率,没有直接后去的接口,只能通过将信道转换成频率,这里正好在。类,发现有没有这个方法,正好我们的设备也有一个Android9的那怎么兼容呢?,我们想在代码中获取这个ip,还不能直接获取,因此需要通过广播才可以。类里的方法可以获取到,但是这个类里的很多方法都是。转载 2023-10-17 19:19:10 · 2333 阅读 · 0 评论 -
Android14 适配之——现有 App 安装到 Android14 手机上需要注意些什么?
1Android14 即将正式发布,作为开发者需要注意哪些内容?长话短说,一起来看看吧~主要分为两部分:一是影响所有的 Android 应用,这些改动会影响所有的 App,只要你的 App 安装在了 Android14 的设备上,都会受到这些影响。二是当 targetSdkVersion 升级到 34 后,我们的 App 所受到的影响。这一篇先来说说第一部分的内容,即。1。转载 2023-10-16 11:22:19 · 3118 阅读 · 0 评论 -
热点开关状态的判断和获取热点ssid
最近在做Android盒子开发的时候,在对wifi和热点的开发需求也是比较多的,在项目开发中需要对热点进行开关和对状态的判断,经过查询相关资料找到解决方案WifiManager.java源码,通过WifiManager中的api来获取相关状态,而在其中的getWifiApState() 就是获取热点开关的状态。通过 getWifiApState() 方法返回值的注释,可以找到如下几种状态,拿到当前状态值之后,只需要对比各种状态的值,就知道热点的开启状态了。2.1获取热点状态的两种方法。转载 2023-10-10 10:47:53 · 870 阅读 · 0 评论 -
Android Native Looper 机制
本文摘自写给应用开发的 Android Framework 教程,完整教程请查阅 https://yuandaimaahao.github.io/AndroidFrameworkTutorialPages/,更为详细的视频教程与答疑服务,请联系微信 zzh0838本文基于 aosp android-12.0.0_r26 分支讲解一个简单的 main 函数执行完毕后,整个进程也就结束了,为了让一个进程长时间的运行下去,就需要无限循环加事件通知的机制,这类机制的伪代码描述如下:Android 平台的这类机转载 2023-10-10 10:17:42 · 404 阅读 · 0 评论 -
获取Wifi开关状态、控制Wifi开关
获取Wifi开关状态、控制Wifi开关转载 2023-10-09 18:05:54 · 201 阅读 · 0 评论