自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 收藏
  • 关注

原创 【Android GUI】FramebufferNativeWindow与Surface

FramebufferNativeWindow是为surfaceflinger服务的,由Gralloc提供。surface虽然为应用程序服务的,但是本质上还是由surface flinger服务统一管理的。

2024-04-17 14:59:31 999

原创 【Android GUI】从总体上了解Android的GUI体系

Android的HAL层提供了Gralloc,包括fb和gralloc两个设备。VSync是“Project Butter”加入的同步机制,可以通过硬件产生,也可以通过软件,即VSyncThread模拟。Framebuffer是内核系统提供的图形硬件的抽象描述,它占用了系统存储空间的一部分,是一块包含屏幕显示信息的缓冲区。Gralloc对应的模块是由FramebufferNativeWindow在构造函数中加载的。Android中,Framebuffer提供的设备文件节点是。

2024-04-17 11:57:25 868 1

原创 【Android】Activity task和Instrumentation杂谈

Android不仅可以装载众多的系统组件,还可以将它们跨进程组成ActivityTask,这个特性使得每个应用都不是孤立的。

2024-04-16 15:03:40 1112

原创 【Android AMS】startActivity流程分析

AMS是个用于管理Activity和其它组件运行状态的系统进程。

2024-04-16 11:07:05 711

原创 【Android surface 】二:源码分析App的surface创建过程

我们来回顾和总结一路过来的分析,为后续破解surfaceflinger做准备。创建了一个SurfaeComposerClient,调用它的createSurface,拿到一个SurfaceControl对象。调用SurfaceControl的writeToParcel把信息写道parcel中。根据parcel的信息构造一个surface对象,并保存到java层的mSurface对象中。这样viewroot得到了一个native的surface对象。

2024-04-12 16:29:36 1213 1

原创 【Android Surface】从Activity的创建到Surface的创建,源码分析1

我们知道Android绘制图形依靠的是surface和surface flinger,但是当我说起这句话的时候,你脑海里面能复现出一幅图画,里面展示了Android绘制图像,然后渲染到屏幕这整个执行流程吗?如果没有,一起来研究研究Android的这个机制。我想,理清楚之后,作为Android开发的我们,必定获益良多。先看看surface系统的的整体关系:不论是使用Skia绘制二维图像,还是使用OpenGL绘制三维图像,APP都会Surface进行交互。

2024-04-12 11:09:51 1008

原创 【Android ServiceManager】从源码入手,剖析ServiceManager是如何处理客户端的请求的?

代码分析到这里,我们总结下,前面代码中ServicManager打开了binder设备,让自己成为manager,接着进入循环并通过ioctl与binder设备进行交互,用于来处理客户端发过来的消息。我们不禁去思考ServiceManager存在的价值是什么。ServiceManager可以通过字符串查找对应的Service,这个与DNS很类似。并且ServiceManager对服务进行了权限控制,使得并非所有服务都能进行注册,这无疑提高了Android的安全性和各种服务的条理性。

2024-04-03 13:50:42 736

原创 【Android Binder】从源码出发,剖析Binder机制的实现流程

在这里我们可以做一个总结:这行代码中创建了BpBinder对象,然后把BpBinder对象作为参数新建了了一个BpServiceManager对象。sm就是这个BpServiceManager对象。一个是BpBinder对象,它的handle值为0,。一个BpServiceManager对象,它的mRemote值为BpBinder对象。而且BpServiceManager实现IServiceManager接口,又有了BpBinder作为通信代表。到这里进行通信的准备做的差不多了。但是还差些什么。

2024-04-02 11:09:37 1078

原创 【Android Handler】从源码出发,一步步窥探Handler在Java层的数据结构关系和执行原理

Handler作为消息机制在整个Android系统里面起到了无可替代的作用,我们今天来探讨下这个无比重要的机制的实现细节。

2024-03-29 15:42:27 963

原创 【Java 多线程】从源码出发,剖析Threadlocal的数据结构

ThreadLocal是个很重要的多线程类,里面数据结构的设计很有意思,很巧妙。但是我们平时使用它的时候常常容易对它的使用感到迷惑,因为它跟其它的API很不一样,使用很不一样,设计也很不一样。但是不用担心,这篇文章将从源码出发,一步步深入剖析ThreadLocal内部构造,理清楚它的来龙去脉。

2024-03-28 17:03:55 810

原创 【Android 内存优化】KOOM线程泄漏监控的实现源码分析

前面我们通过研究KOOM的开源代码,研究了关于Java层和native层内存泄漏监控的实现原理。还剩下线程泄漏这部分没有进行分析,今天来补全它。整体下来,相信我们对于内存监控在代码上的实现上会有一个较为体系化的了解。

2024-03-26 11:28:08 364

原创 【Android 内存优化】Koom核心内存指标分析

这就是KOOM在Java层内存监控拿到的内存指标。有了这些指标,可以比较清晰地知道当前机器和进程内存的情况。

2024-03-24 22:54:48 938

原创 【Android 源码】Android源码下载指南

这是关于Android源码下载的过程记录。环境:Windows上通过VMware安装的Ubuntu系统。

2024-03-23 11:38:04 578

原创 【Android 内存优化】 native内存泄漏监控方案源码分析

Android的native泄漏怎么检测?下面通过研究开源项目KOOM来一探究竟。

2024-03-21 17:10:34 1012

原创 【CMake】Android native模块a调用native模块b,如何配置cmake?

Android项目中如何配置cmake,让module a的native代码调用module b的native代码?首先可以看看CMAKE_SOURCE_DIR的具体路径:定义子目录的路径把子模块的cmakelists添加关联接着根据自己项目的具体位置,找到实际上module a的代码路径。接着调用add_subdirectory,添加到对应的路径中。add_subdirectory的主要作用是添加另外一个cmakelist到当前的cmakelisk的搜索目录中。这里需要注意的是,这种情境下使用

2024-03-18 14:32:59 411

原创 【Android 内存泄漏】KOOM 怎么实现线程泄漏的监控?

前面分析了KOOM Java leak、native leak的监控思路,这篇继续分析它线程监控的整体思路。

2024-03-12 11:39:47 948

原创 【C/C++ API】C++内存分配和释放函数分析

是一个 C 语言函数,用于分配一块内存,并保证返回的指针地址满足特定的对齐要求。指向的内存块,并使该内存块可用于后续的内存分配。字节,并返回一个指向重新分配后的内存块的指针。之后,我们检查是否分配成功,然后使用该内存,最后在不再需要时释放该内存。是 C 标准库中的一个函数,用于分配一块内存,并保证返回的指针地址满足特定的对齐要求。是 C 标准库中的一个函数,用于重新分配先前分配的内存块的大小。,即要释放的内存块的指针。是 C 标准库中的一个函数,用于动态分配内存,并将分配的内存空间初始化为零。

2024-03-11 15:41:08 770

原创 【Android 内存优化】快手框架KOOM是怎么实现native层内存泄漏监控的?

我们可以大体总结一下KOOM监控native泄漏的大致原理:主要是通过加载需要监听的so,然后通过开源框架XHook来hook内存分配相关的调用函数,把hook获取到的信息回调给Java应用层,从而达到监控native内存的目的。

2024-03-11 14:43:22 772

原创 【Android 内存优化】KOOM 快手开源框架线上内存监控方案-源码剖析

这篇文章主要剖析KOOM的Java层源码设计逻辑。【Android KOOM】KOOM java leak使用全解析/**/很简单的两行代码,里面包含了如此之多的业务逻辑和精彩的设计。很多时候,我们使用越是简单的开源框架,越是能证明作者的厉害之处。他们把繁杂的逻辑内聚到了框架里面,让使用者能用简单一两行代码实现复杂的逻辑业务。KOOM作为一个线上内存监控框架,有很多优秀的设计。这篇文章也只是在外层分析了一些表面的技术逻辑,至于更深入的内容,后续会继续更新。

2024-03-09 11:40:21 1254

原创 【Android KOOM】KOOM Java层泄漏使用全解析

koom java leak 的demo泄漏和使用分析

2024-03-08 17:13:09 493

原创 【Android 内存优化】怎么理解Android PLT hook?

来学习PLT hook的原理!

2024-03-04 18:05:15 924

原创 【Android studio 报错】Caused by: java.lang.reflect.InaccessibleObjectException 解决方案

经过一些尝试,上两图中修改的JDK version和Gradle version,可以编译通过。通过AI,大概了解报错的原因,高版本的JDK为了更好的高内聚和低耦合,引入了模块系统。

2024-03-01 11:40:08 750

原创 【Android 需求方案实现】 在屏幕上画一条线的时候,如何把这条线经过的所有坐标点(高效&有序&完整)地发送出去?

*** 监听签名坐标*//*** click down的坐标*//*** touch move的坐标*/

2024-02-26 11:48:19 1193

原创 【Android 问题排查】为什么XML中设置的长宽和代码通过getWidth的值对不上?

记一次xml尺寸和代码获取尺寸不同的问题排查

2024-02-23 11:19:41 416

原创 【Android内存优化】基础知识点:程序运行时加载并调用动态链接库中的函数

对于native层内存泄漏的监控,我们需要调用虚拟机的一些函数去获取对应的堆栈数据。总所周知,Java虚拟机,或者Android的ART、Davik虚拟机也都是用C/C++写的,这就需要我们调用通过Linux提供的一些接口去调用虚拟机的动态库,去执行对应的功能,在程序运行时加载并调用动态链接库中的函数。所以掌握动态链接这个知识点就显得很有必要。

2024-02-07 15:06:55 869

原创 【C++】namespace命名空间

匿名命名空间是 C++ 中的一种特殊的命名空间,它没有名称,用于限定其中声明的变量、函数和类的作用域。通常情况下,匿名命名空间适用于那些在当前文件中定义的具有局部作用域的变量、函数、类等,而不需要在其他文件中引用或者暴露给外部的情况。在匿名命名空间中声明的变量、函数、类等只在当前源文件中可见,不能被其他源文件访问,所以不会与其他文件中的同名符号发生冲突。:在匿名命名空间中声明的变量、函数、类等的作用域被限制在当前文件中,对其他文件不可见。的命名空间,包含了一个整型变量。来访问命名空间中的成员。

2024-02-07 14:29:48 368

原创 【Android性能优化】9个方法避免内存泄漏

我们做开发的时候,很容易专注于做功能和业务层面的开发,而忽略APP的性能表现,今天来列出一些做Android开发的时候很容易出现内存泄漏的点。

2024-02-05 15:33:02 1145

原创 【Android性能优化】内存优化前置知识剖析

内存优化作为Android性能优化中非常重要的一环,这篇blog主要记录了跟内存优化相关的重要命令、核心指标、相关原理的解析。作为前置知识,起到奠基的作用。阅读完本篇内容,你将对于Android的内存优化有个大致的知识框架。更加详细的解析,会在后续blog中更新。

2024-02-01 16:23:21 864

原创 【Java】Java的对象参数踩坑总结

今天写代码的时候,犯了一个很基础很低级的错误。实在惭愧,在此花点顺手记录一下,养成习惯。需求是需要把byte[]作为入参的同时,也作为出参,传一个空白的byte[]作为参数,在方法里面修改byte[],修改完毕后,外面方法获取到被修改后的参数,很简单吧。

2024-02-01 15:21:09 427

原创 【Android】Android 固件和内核启动过程概览

Android手机用来这么久,来了解下刷机的时候Android 固件和内核启动过程是怎么样的?

2024-01-26 11:32:34 943

原创 【Android】Android中的系统镜像由什么组成?

一起来看看Android的镜像系统里面都有什么!

2024-01-24 17:42:27 1085

原创 【Android】细数Linux和Android系统中的伪文件系统

做了好些年Android开发,你了解过Linux伪文件系统吗?不妨来学习一下,增强我们的技术垂直度。

2024-01-23 18:57:52 1095

原创 [Android] Android文件系统中存储的内容有哪些?

一文带你深入浅出地读懂Android文件系统的方方面面

2024-01-23 11:44:30 1160

原创 [Android] Android架构体系(2)

是 Android 中所有进程间通信的关键,它源自于 BeOS。不过 Android 中的这个组件是使用启发式的方法来寻找要被杀掉的进程的,而 Linux 原有的进程终止器是以一种更具确定性的方式控制杀进程的行为的,而且还允许定义内存压力等级。它的主要客户端是设备中的振动器(vibrator)功能框架(通过硬件抽象层)可以把一个数值(单位为毫秒)写入/sys/classtimedoutput/vibrator/enable 中,这样就启动了振动器,并让振动器振动了这个值规定的时间之后停下来。

2024-01-18 21:33:05 1262

原创 [EMV]一文读懂GAC

EMV 交易包括执行特定的认证(如联机交易认证、脱机交易认证)以及生成与之相关的授权密文。GAC 步骤在交易完成后,通过将相关的交易数据输入到生成授权密文的算法中,产生一个数字签名或密文。这个密文通常会发送给发卡方,以便发卡方验证授权并作出相应的决策。如果是脱机交易,GAC 通常包括对在卡片上存储的数据的认证。这可以包括验证卡片上的静态数据、动态数据和密钥。使用卡片上的密钥,交易数据和其他参数,GAC 生成一个称为“应用密文”的数据元素。应用密文是由卡片生成的,用于证明交易的完整性和真实性。

2024-01-18 15:54:32 1032

原创 [Android] Android架构体系(1)

尽管谷歌宣称选择 Bionic 的理由主要是因为它的简洁性,但实际上合法性的考虑也占了很重要的位置。虽然偏离得并不是很远,但它运行的是一种完全不同形式的字节码(这种字节码叫作 DEX,也就是“Dalvik EXecutable”的缩写),而且相对于 Sun/Oracle 设计的JVM,它在执行效率和共享内存方面做了更多的优化。而用户的应用则是编译成Dalvik 字节码的,但字节码是运行在 Dalvik 虚拟机的上下文环境中的(或者在 ART 中,是在运行之前被编译成原生代码的)。

2024-01-17 18:28:35 1230 1

原创 【Android】Android与Linux的异同概况

而在用户态这一级上,由于引入了两个全新的组件 Dalvik 虚拟机运行时和硬件抽象层(Hardware Abstraction Layer)。再加上替换了 Bionic 的 glibc,以及提供了一个定制版本的 init(系统启动守护进程),Android 和 Linux 的分歧就大多了。不过尽管是这样,操作系统更多底层的大部分组件仍然没有被修改过,那些原生二进制可执行文件以及进程和线程的行为仍然和它们在 Linux 系统中时一模一样。

2024-01-17 10:27:20 1176

原创 [金融支付]EMV是什么?

每个认证层次都会生成相应的认证证书,这些证书是对通过认证的组件或系统的一种确认,表明其符合EMV规范的要求。EMV认证指的是符合EMV标准的支付卡产品、终端设备以及相关支付系统的认证过程。这一层次的认证关注的是支付卡应用层的处理逻辑,包括卡片上的应用和终端设备上的应用。根据EMV规范,EMV认证通常包括对硬件、EMV内核以及应用层处理逻辑的三个层次的认证审核,每个层次都会获得相应的认证证书。在EMV交易中,终端、卡片和支付系统之间的通信需要遵循一定的规则和协议,确保交易的安全性。

2024-01-11 18:57:57 1519

原创 【金融支付】常用术语和定义

下列术语和定义适用于本标准。3.1银行卡 bank card商业银行等金融机构及邮政储汇机构向社会发行的,具有消费信用、转账结算、存取现金等全部或部分功能的信用支付工具。3.2磁条卡 magnetic stripe card物理特性符合GB/T 14916标准,磁条记录符合GB/T 15120 、GB/T 15694-1、ISO 7812-2、GB/T17552标准的银行卡片。3.3销售点终端 point of sale;POS。

2024-01-11 11:07:13 1106 3

原创 密码学:一文看懂安全协议--HTTPS

网银平台通常少不了数字证书,更少不了安全协议–HTTPS协议。HTTPS协议实际上基于SSL/TLS的 HTTP协议,位于应用层,简单地说HTTPS=HTTP+SSL/TLS。SSL/TLS协议本身是带有加密信息的传输层协议,数字证书正是为这种协议提供相关加密/解密信息。

2024-01-10 20:58:26 1295

【Android KOOM】KOOM java leak使用全解析

导出的堆转储文件

2024-03-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除