- 博客(35)
- 资源 (9)
- 收藏
- 关注
原创 Binder解析精炼
Server进程向binder驱动向Binder驱动发起服务注册请求向Binder驱动申请创建一个XXXService的Binder的实体,Binder驱动为这个XXXService创建位于内核中的Binder实体节点以及Binder的引用Binder驱动将注册请求转发给ServiceManager进程Binder驱动将名字和新建的引用打包传递给SM(实体没有传给SM),通知SM注册一个名叫XXX的Service。
2024-07-14 17:26:05
665
原创 BindService详解
我们主要看中下面这段if (s.app!try {s.app!s.app!= null这个条件一般应该都满足。那么是什么时候设置为true的呢?答案就在的时候if (r!= null &&!再来看这个条件。先来看``b.intent.apps.size() == 1这个条件,它的设置在ServiceRecord#retrieveAppBindingLocked`中if (a!return a;
2024-07-14 16:58:46
1755
原创 鸿蒙account系统帐号组件解析
1 account组件框架在标准系统上,系统帐号组件主要提供分布式帐号登录状态管理能力,支持在端侧对接厂商云帐号应用,提供云帐号登录状态查询和更新的管理能力。2 目录结构/base/account/os_account├── common # 公共基础模块│ ├── account_error # 错误码定义│ ├── log # 日志打印代码│ ├── perf_stat # 性能统计│ └── t
2021-06-14 18:04:31
1740
原创 鸿蒙时间组件解析
1 时间组件架构时间组件提供管理系统时间的能力。2 目录结构/base/miscservices/time├── etc # 组件包含的进程的配置文件├── figures # 构架图├── interfaces # 组件对外提供的接口代码│ └── kits # 对应用提供的接口├── profile # 组件包含的
2021-06-14 13:32:17
1740
原创 鸿蒙init模块源码解析
1 简介init组件负责处理从内核加载第一个用户态进程开始,到第一个应用程序启动之间的系统服务进程启动过程。从系统启动流程来看,init位于kernel启动之后,user程序启动以前。user程序,是指用户可交互的程序(比如Home、SystemUI、WeChat等)。init模块负责解析系统引导配置文件,并执行里面的命令,完成系统的引导操作。鸿蒙OS的引导配置文件使用JSON格式。系统开发人员会在这里接触到鸿蒙系统的第一个配置文件。这一点应该是借鉴Linux系操作系统。我们知道Android系
2021-06-14 00:11:23
1185
1
原创 android存储系统
Android的存储系统主要由SystemServer进程的MountService和Vold进程的VolumeManager组成。它们管理系统的存储设备,执行各种操作,如mount、unmount、format等。 在Android存储系统中,MountService是为应用提供服务的Binder类,运行在SystemServer中,而StorageManager是MountServer的代理,在用户进程中使用的。Vold是一个守护进程,负责和底层存储系统驱动交互。MountService和
2021-03-30 14:27:01
689
原创 Android电源管理分析
Android电源管理1.电源管理服务–PowerManagerService PowerManagerService提供Android系统的电源管理服务,主要功能是控制系统的待机状态,控制显示屏的开关和亮度调节,以及查询和控制光线传感器和距离传感器等。1.1 初始化过程 PowerManagerService是在SystemServer中创建并加入到ServiceManager中的:Slog.i(TAG, "Power Manager");power = new PowerManag
2021-03-30 12:27:36
1720
1
原创 Android应用程序资源管理器(Asset Manager)的创建过程分析
Android应用程序资源管理器(Asset Manager)的创建过程分析 在前面一篇文章中,我们分析了Android应用程序资源的编译和打包过程,最终得到的应用程序资源就与应用程序代码一起打包在一个APK文件中。Android应用程序在运行的过程中,是通过一个称为AssetManager的资源管理器来读取打包在APK文件里面的资源文件的。在本文中,我们就将详细分析Android应用程序资源管理器的创建以及初始化过程,为接下来的一篇文章分析应用程序资源的读取过程打下基础。 从前面Andro
2021-03-30 10:52:27
617
原创 Android应用程序启动过程-full_step
Android应用程序启动过程 在Android系统中,应用程序是由Activity组成的,因此,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过程,本文将详细分析应用程序框架层的源代码,了解Android应用程序的启动过程。 在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的A
2021-03-26 16:45:31
712
原创 Android MediaPlayer源码分析
Media Player 源码分析目录1.简介2.Media Server3.MediaPlayer 调用流程3.1 构造函数3.2 设置数据源3.2.1 获取 MediaPlayerService 接口3.2.2 获取 MediaPlayer 接口3.2.3 设置数据源3.3 Prepare3.4 start3.5 pause3.6 stop3.7 release4.总结5.参考1.简介MediaPlayer 中大部分的功能使用 C++ 实现,Java
2020-12-04 09:38:19
907
原创 编译静态库为动态so库
在从事Android开发的过程中,经常会使用到用c或c++编写的第三方的静态库,比如对接第三方时,对方不希望提供源码,又比如在我们的编译环境下,无法编译某个库。这个时候就可以用静态库来编译成动态库so。之前在网络上看过很多方法,似乎都编译失败,因此这里有必要记录一下。下面以从ffmpeg社区获取到的静态库和头文件的例子,来讲解将静态库编译成动态库so。编写的Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODUL
2020-12-04 09:18:13
846
原创 Android多媒体添加软解码
1 软解码加载简介1.1 编解码器信息与配置导入android中decoder的管理是以plugin的模式,其控制是在OMXMaster内完成的。OMXMaster是在omx被创建时就创建了OMX::OMX(): mMaster(new OMXMaster),mNodeCounter(0) {}Plugin在OMXMaster构造的时候载入OMXMaster::OMXMaster(): mVendorLibHandle(NULL) { addVendorPlugin(); /
2020-12-03 18:35:10
3138
转载 GStreamer和gst-omx插件
1 Gstreamer基本介绍1.1 Gstreamer简介Gstreamer是linux上的多媒体框架。如下所示:从上面这个图中可以看到,底层是以plugin插件形式存在包括codec标准,parser,audio, protocol等,也包括用户自己开发的plugin和第三方开发的plugin。core framework提供了plugin之间的交互机制和管理,通过将一些plugin连接起来形成一个系统,并且对上提供访问的接口。APP是构建在framework上的。通过这个框架,底层开发者可以
2020-11-26 16:40:40
3303
1
转载 repo新建分支
最近在做一个项目的移植,需要从主分支上,拉一个分支来移植旧平台上的修改。之前都是用git仓库直接管理版本,但是这个项目由于有多个git仓库,因此使用了repo来管理这些git仓库,从事这个项目,首先我需要拉一个repo分支来移植。 repo最大的特点就是其实repo只不过是利用git(manifest仓库)来记录管理多个git仓库而已。因此我们利用repo创建一个新的分支,其实就是给repo管理的每个git仓库创建一个一样的新分支。我们知道单个git仓库创建分支的命令很简单。1.创建一个新分支gi
2020-11-24 18:49:09
8863
1
原创 Android recovery修改字库大小
在Android开发过程中,各个厂商通常会去修改recovery界面。在recovery显示界面上,通常有几大修改点:recovery字体大小recovery界面背景图、进度条等修改、提示语修改recovery支持中文显示这篇文章,主要讲一下如何修改recovery字体大小。1 常用的字体大小修改方法直接上结论:方法1:制作图片修改recovery源码目录fonts下的png文件,如12x22.png,将它拷贝到recovery的out目录下的/res/image目录下,命令为font.
2020-11-16 09:33:32
1610
2
原创 Android电源管理之系统休眠
1. 概述设备的休眠是功耗分析中的重要篇章,有些问题经常会涉及到系统无法休眠,经常被唤醒等情况。在这里将从代码角度来分析下Android系统休眠和唤醒的机制,而本篇将着重阐述休眠机制。 Android系统的电源管理子系统是已Linux的电源管理系统为基础,针对现实问题又进行了改造,而这里的现实问题来自于PC和移动设备的差异,其核心在于什么时候休眠,什么时候唤醒。在PC系统中,什么时候让系统进入休眠(通常是STR、Standby、Hibernate等suspend操作)这个问题很容易理解:答案就是由用户
2020-08-17 14:25:36
5516
原创 Android input键值从底层到应用层映射流程与修改方法
一、Android输入子系统简介:Android输入事件的源头是位于/dev/input/下的设备节点,而输入系统的终点是由WMS管理的某个窗口。最初的输入事件为内核生成的原始事件,而最终交付给窗口的则是KeyEvent或MotionEvent对象。因此Android输入系统的主要工作是读取设备节点中的原始事件,将其加工封装,然后派发给一个特定的窗口以及窗口中的控件。这个过程由InputManagerService(以下简称IMS)系统服务为核心的多个参与者共同完成。二、kernel键值定义(1)键扫
2020-08-13 16:38:43
4950
原创 Linux使用mailx通过第三方SMTP发送邮件,也可发送附件
mailx安装1、手动安装:wget http://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5.orig.tar.gztar zxvf heirloom-mailx_12.5.orig.tar.gzcd heirloom-mailx-12.5/make && make inst...
2020-08-13 16:33:43
1022
原创 selinux常见neverallow项解决方法与常用命令
1. dac_overrideegbin: type=1400 audit(0.0:879): avc: denied { dac_override } for capability=1 s:egbin:s0 tclass=capability permissive=1 需要给egbin dac_override权限,但是该权限是Android P的neverallow规则中的,不能被添加。dac_override权限意思是容许进程旁路的所有DAC权限:uid,gid,ACL 等等,即有这个权限可
2020-08-13 16:31:25
29700
3
原创 在Android和linux上操作GPIO
本文记录如何在Android和linux上操作GPIO 。1 前置条件ROM必须满足以下条件:* Android M >= V170603* Android N >= V170421* Ubuntu Server >= V180712* Ubuntu Mate >= V1805312、如何获取GPIO编号可以从GPIO Bank或 Pins 获取GPIO编号。 不同版本的内核将有所不同。Linux 3.14 (Android M, N and
2020-07-03 17:49:25
1536
原创 Android 编译错误undefined symbol分析与解决
Android 编译错误undefined symbol分析与解决方案最近在Android Q上写一个bin文件时遇到编译报错的问题,具体报错如下:ld.lld: error: undefined symbol: android::RefBase::decStrong(void const*) const>>> referenced by StrongPointer.h:182 (system/core/libutils/include/utilsPointer.h:182)
2020-07-03 15:51:40
49356
2
原创 使用wareshark导出网络包视频流
在分析播放问题时,经常需要抓取网络包进行分析,判断网络是否有丢包、抖动,延时等。如果能从网络包从导出视频流,然后查看视频流的播放情况,在一定程度上也能帮助我们分析、解决问题。下面将一种使用wareshark获取视频流的方法。1、用wareshark打开网络包2、过滤视频流选择任意一个视频流,右键选择追踪流->UDP流等待左下角加载完,才可以操作3 保存视频流数据加载完之后,点击 显示和保存数据为 原始数据,然后点击Save as弹出保存的界面,数据文件名为.ts,然后保存等
2020-06-23 18:12:32
3307
2
原创 动态so库修改方法
对于linux和Android开发者,有时可能需要查看或者修改.so文件,下面来讲述如何查看或者修改so文件。1、本文使用的工具IDA Pro: https://www.52pojie.cn/thread-675251-1-1.html010 Editor:http://www.pc6.com/softview/SoftView_55129.html2、反编译.so文件 本文使用的反编译软件是IDA Pro,它是一个优秀的静态反编译软件。由于IDA功能较为复杂,本文只给出查看和修改so直接相
2020-06-01 15:48:54
9366
原创 Android添加自定义公共so库
Android对应用应用的系统库限制越来越严格,上层应用包括(apk、jar包)不能直接引用系统的一些so库了。如果需要使用,只能使用,系统申明的公共库。如果使用非系统申明的公共库,apk运行后调用该so库时,app会直接挂掉。1、错误信息具体报错形式如下:01-01 02:17:24.222 7475 7475 E linker : library "/system/lib/libhalloworld.so" ("/system/lib/libhalloworld.so") needed
2020-05-26 15:51:14
7787
1
原创 算法系列--选择排序详解
选择排序原理: 从待排序的元素中选出最小(大)的元素放在起始位置,然后再从剩余的元素中选出最小(大)的元素放在已排好的部分之后,直到只剩最后一个待排序的元素为止. 首先初始化最小元素索引值为首元素,依次遍历待排序数列,若遇到小于该最小索引位置处的元素,则刷新最小索引为该较小元素的位置,直至遇到尾元素,结束一次遍历,并将最小索引处元素与首元素交换;然后,初始化最小索引值为第...
2019-11-22 23:08:36
152
原创 算法系列--堆排序详解
希尔排序(shell sort)该方法的基本思想是:将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样的操作可使需要排序的数列基本有序,最后再使用一次直接插入排序。 对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序。先取一个小于n的整数d作为第一个增量把文件的全部记录分成d个组。所有距离为d的倍数的记录放在同一个组中。先在各组内进行...
2019-11-22 22:59:31
143
Linux使用mailx通过第三方SMTP发送邮件,带附件操作
2019-10-11
教你如何学好Android
2016-04-16
电学端口串联叉指换能器连接分析
2016-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人