自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android系统工程师--小馬佩德罗

分享专业的Android系统技术知识

  • 博客(174)
  • 资源 (9)
  • 收藏
  • 关注

原创 欢迎Fork我们的开源云手机项目--OPENVMI(Virtual Mobile Infrastructure)(VMI)

基于ARM+Linux体系构建的VMI(Virtual Mobile Infrastructure)云平台

2020-09-20 17:04:26 13819 59

原创 系统架构设计师考试-专业英语

词汇含义access存取active-matrix主动矩阵adapter适配器,转换器adapter cards适配卡agents代理analog signals模拟信号animations动画applets程序arithmetic operations算术运算array数组,阵列assembly汇编,安装,装配asynchronous异步的,非同步的asynchronous communic

2024-03-20 09:20:32 399

原创 设计模式的另一种有趣理解

当系统的状态变化时,系统便改变所选的子类。跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。

2024-02-20 16:05:51 1217

原创 Linux系统中 ssh 连接其他服务器一段时间后卡死问题

在Ubuntu下经常需要通过SSH进行远程连接,使用过程中往往会遇到一个问题,就是命令行窗口在经过一段时间后就会卡死,无法输入命令。

2023-07-18 11:08:33 2400 3

原创 Android系统的问题分析笔记(10)- Android 系统安装Google三套件

Google三套件:下载地址:https://www.apkmirror.com/apk/google-inc/google-services-framework/下载地址:https://www.apkmirror.com/apk/google-inc/google-play-services/下载地址:https://www.apkmirror.com/apk/google-inc/google-play-store/

2023-07-09 18:16:22 646 1

原创 在windows系统中映射网络驱动器时,如何通过非455端口远程访问Linux服务器的Samba服务

右键 电脑–管理–服务和应用程序–服务,找到名为Server的服务,双击打开属性,启动类型改为禁用。在映射网络驱动器时,填入127.0.0.1即可映射至Linux服务器的Samba服务。是 pid 为 4 的进程进行监听。

2023-06-27 16:44:46 2134 17

原创 Android系统的问题分析笔记(9) - Android 中的 Uri 如何使用呢 ?

通用资源标志符 URI (Universal Resource Identifier),URI 在 java.net.URI 中定义,显然是 Java 提供的一个类。而 Uri 位置在 android.net.Uri 中定义(Android 源码内位置:frameworks/base/core/java/android/net/Uri.java),是特有针对 Android 系统定义的类。Uri 代表要操作的数据,Android 上可用的每种资源(图像、视频片段、网页等)都可以用 Uri 来表示。

2023-06-15 09:21:07 4204 19

原创 Android系统视角下对APK的分析(2)- APK安装过程的定性分析

声明以Android手机用户角度来看,安装各式各样的APP,基本就是从应用市场上 “搜索->下载->安装” 三连。而对Android系统来说,这就是个大工程了,因为对Android系统来说APK是“外来户”,如何安装它、有限制地支持它的运行、如何防着它干坏事等问题就来了。写此专栏的起因是为了给客户在定制的Android系统中实现 大型APK快速安装的功能。本专栏就来从Android系统的角度来分析下APK的整个生命周期(安装-运行-卸载),包含对APK的静态分析、PackageManag

2023-06-12 21:30:00 1479 7

原创 Android系统视角下对APK的分析(1)- 静态分析APK文件

因此你的证书不需要必须由 CA 颁发,实际上所有 Android 里使用的代码签名,均是自签名的。APK 文件格式是 JavaJAR 的一种扩展格式,当然也是广为流行的 ZIP 文件格式的扩展格式,可以使用 ZIP 格式的压缩工具对其进行解压。采用 Html5 语言写的 App,不需要下载安装,类似于现在所说的轻应用,是生存在浏览器中的应用,可以理解为触屏版的网页应用。Native App 指的是原生程序,一般依托于操作系统,有很强的交互,是一个完整的App,可拓展性强,需要用户下载安装使用。

2023-06-11 19:12:18 2247 2

原创 Android系统原理性问题分析 - epoll 的事件模型

在Android系统原理性问题分析 - 多路并发情况下的C/S模型中分析了 I/O 多路复用的 epoll 机制,此篇分析下 epoll 的事件模型。Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会触发。假定已经把一个用来从管道中读取数据的文件描述符(RFD)添加到 epoll 描述符。管道的另一端写入了 2KB 的数据。

2023-06-10 23:10:03 836

原创 Android系统原理性问题分析 - Linux 线程池(Thread Pool)的实现原理

【代码】Android系统原理性问题分析 - Linux 线程池(Thread Pool)的实现原理。

2023-06-10 17:00:54 88

原创 Android系统原理性问题分析 - 系统 Root 的实现原理

su 会利用这个 LocalSocket 连接将调用 su 命令的 Android 应用的信息传递给 Superuser.apk,这些信息就是在Root 授权窗口上看到的 APP 的名称的图标。系统原生的 su 对于所有的应用程序是平等的,所以原生的su 是无法保证 su 的安全的,SuperUser 必须安装自定义的 su,以及能够保证自身 su 不被替换的 deamon 进程。以上代码对用户来说是无感知的,所以如果一个 Android 应用利用 su 执行 Linux 命令,用户是不知道的。

2023-06-10 11:00:00 891

原创 Android系统的问题分析笔记(8) - Android 系统的调试方法有哪些 ?

问题Android 系统的调试方法有哪些?(此篇分析基础为Android 7.1.1系统源码)概述  偌大的Android系统中,出bug是难免的,对于开发者而言出bug不可怕,关键是要知道如何debug。此篇总结下Android系统常用的调试方法。1 Native部分调试1.1 标准Linux调试方法  由于Android 系统基于 Linux 实现,在系统中可以使用 Linux 中标准的方法进行调试。在Android系统中有一个类似于 Linux 中 busybox 一样的工具集 toybo

2023-06-09 00:11:32 1100

原创 Android系统的Ashmem匿名共享内存子系统分析(2)- 运行时库cutils的Ashmem访问接口

如果是,那么第15行就将它的 PROT_EXEC 位也设置为1,因为当一个进程的 personality 属性的 READ_IMPLIES_EXEC 位被设置为1时,就表示当它有权限读一块内存时,也隐含着它对该内存有执行权限。此后,应用程序只能删除它的访问保护位,而不能增加它的访问保护位。调用函数 open 打开设备文件 /dev/ashmem 时,Ashmem 驱动程序的函数 ashmem_open 就会被调用主要是为应用程序创建一个 ashmem_area 结构体,用来描述一块匿名共享内存。

2023-06-07 09:09:53 529

原创 Android系统的Ashmem匿名共享内存子系统分析(4)- Ashmem子系统的 Java访问接口

Binder 进程间通信机制使用一个类型为 BINDER_TYPE_FD 的 Binder 对象来描述一个文件描述符,当 Binder 驱动程序发现进程间通信数据中包含有这种 Binder 对象时,就会将对应的文件描述符复制到目标进程中,从而实现在两个进程中共享同一个文件。成员函数 readBytes 用于读取某一块匿名共享内存的内容,成员函数 writeBytes 用于写入某一块匿名共享内存的内容,成员函数 isDeactivated 用于保证匿名共享内存已经被映射到进程的地址空间中。

2023-06-06 23:15:00 360

原创 Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口

通过引用信息中的 Server 端的 MemoryHeapBase 对象的引用 heap,可以在 Client 端进程中创建一个 BpMemoryHeap 远程接口,最后将这个 BpMemoryHeap 远程接口保存在成员变量 mHeap 中,同时从 Server 端获得的信息还包括这块匿名共享内存在整个匿名共享内存中的偏移位置以及大小。类 IMemory 的具体实现在源码 frameworks/native/libs/binder/IMemory.cpp 中定义。

2023-06-06 22:45:00 816

原创 Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理

Client 组件从 Binder 驱动程序中获得了 flat_binder_object 结构体之后,首先将它封装成一个 ParcelFileDescriptor 对象,然后再将它转换成一个 FileDescriptor 对象,最后就可以使用这个 FileDescriptor 对象来创建一个 MemoryFile 对象,即将 MemoryService 服务内部的匿名共享内存映射到 Client 组件所在的进程的地址空间,从而达到了在不同的进程中共享同一块匿名共享内存的目的。在Linux内核中,

2023-06-06 19:50:46 672

原创 Android系统的Ashmem匿名共享内存子系统分析(1)- Ashmem驱动

Android系统中提供了独特的匿名共享内存子系统Ashmem (Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。能够辅助内存管理系统来有效地管理不再使用的内存块。通过 Binder进程间通信机制来实现进程间的内存共享。对于 Android 系统的匿名共享内存子系统来说,其主体是以驱动程序的形式实现在内核空间的,同时,在系统 Native 层提供了 C/C++ 调用接口和 Framework 层提供了 Java 调用接口。

2023-06-05 22:54:10 538

原创 Android系统中的Binder通信机制分析(7)- Java 层的 Binder 机制

声明其实对于Android系统Binder通信的机制早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…文中参考了很多书籍及博客内容,可能涉及的比较多先不具体列出来了;本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:cm-14.1 Android系统启动过程分析(1)-如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机

2023-05-31 23:06:09 947

原创 Android系统中的Binder通信机制分析(6)- Binder通信机制详解

Binder 实体对象binder_node的定义在内核代码 binder.c 中。//调试id struct binder_work work;//描述一个待处理的工作项 union {//挂载到宿主进程binder_proc的成员变量nodes红黑树的节点 struct hlist_node dead_node;//当宿主进程死亡,该Binder实体对象将挂载到全局binder_dead_nodes 链表中 };

2023-05-30 22:45:00 1505

原创 Android系统中的Binder通信机制分析(5)- 进程间数据传递载体 Parcel

可以想象下,同一进程间的对象传递都是通过引用来做的,因而本质上就是传递了一个内存地址。这种方式在跨进程的情况下就无能为力了。由于采用了虚拟内存机制,两个进程都有自己独立的内存地址空间,所以跨进程传递的地址值是无效的。进程间的数据传递是 Binder 机制中的重要一环,Android系统中担负这一重任的就是 Parcel。Parcel 是一种数据的载体,用于承载希望通过 IBinder 发送的相关信息(包括数据和对象引用)。

2023-05-29 22:45:00 787

原创 Android 系统内的守护进程 - core类中的服务 (6) : servicemanager

只要是操作系统,不用说的就是其中肯定会运行着一些很多守护进程(daemon)来完成很多杂乱的工作。通过系统中的init.rc文件也可以看出来,其中每个service中就包含着系统后台服务进程。而这些服务被分为:core类服务(adbd/servicemanager/healthd/lmkd/logd/vold)和main类服务;

2023-05-28 15:00:54 958

原创 Android系统原理性问题分析 - 单路情况下的C/S模型

各个应用程序创建一个 socket。socket 是一个允许通信的“设备”,两个应用程序都需要用到它。服务器将自己的 socket 绑定到一个众所周知的地址(名称)上使得客户端能够定位到它的位置。使用 socket()系统调用能够创建一个 socket,它返回一个用来在后续系统调用中引用该socket 的文件描述符。不管参数protocol,此篇中protocol参数都设置为0,如果对这个参数感兴趣,可以自行搜索学习。主要分析下前两个参数: domain 和 type。

2023-05-26 12:09:42 757 1

原创 Android系统原理性问题分析 - 多路并发情况下的C/S模型

假设有一个将 INET 套接字用作 C/S 模型。如果想让一个Server端与多个 Client端通信,那么每个Server端 和 Client端都需要 INET 套接字。如果多客户端同时连接服务器端,那服务器端如何处理多客户端的服务请求呢?C/S模型通常有三种处理方式:多进程、多线程、I/O 多路复用。

2023-05-24 21:50:04 734 4

原创 Android系统的JNI原理分析(7)- Android中JNI的高级用法

JNI的基本功能是让 Java 调用Native代码。Native 和 Java 层的双向调用线程处理特殊的文件描述符处理异常处理。

2023-05-23 22:00:00 387

原创 Android系统的JNI原理分析(6)- Android中JNI的存在方式

APK中使用JNI 的核心是其中有 Java 类声明了本地的方法,并且加载了包含JNI本地库得到这些方法。关于Framework层中使用JNI,如果是从本专栏前面开始读过来的,就知道之前对MediaRecorder的分析就属于Framework层中使用JNI,这里就不做赘述了,可以参考前面几篇文章的分析。在应用程序包中使用的JNI,是作为一种补充的实现方式,它让位于 Android 应用层的APP能直接使用包含本地的内容,并随着 APK 一起发布,此时JNI 的库是作为应用程序包的一部分。

2023-05-23 09:15:49 329

原创 Android 系统内的守护进程 - main类服务(7) : sdcard

并非所有的Android 设备都必须支持 SD 卡,不过在Android 系统中还是有一个 sdcard 守护进程,提供用户态中对 SD 卡的支持,其中包括在不支持权限管理的 FAT 文件系统上强制使用权限管理。这是由一种被称为FUSE (File systems in USEr mode,用户态下的文件系统) 的机制来实现的。在完成了降低自身权限的操作之后(使用-u/-g 指定 GID),守护进程会调用 ignite_fuse(),进入一个消息循环中,随时准备处理/dev/fuse 发来的请求。

2023-05-22 21:15:00 355

原创 Android 系统内的守护进程 - main类服务(6) : gatekeeper

不过,运行在 TEE 中的代码还是可以完全访问这些秘密信息的,所以我们仍然能通过 TEE 完成数据加密、身份认证之类的工作。这一举措让 Android 几乎达到了 ios 的高强度的加密标准(在iOS中,一个存储在芯片硬件中的称为UID key密钥,使得暴力破解必须在本机上才能进行,而且速度很慢,即使是破解一个只有 4 位数的 PIN 码也要花很长的时间)在谷歌提供的这个HAL 模块中,是把 TrustZone 作为它自己“可以信赖的”TEE OS的一部分。

2023-05-22 19:30:00 753

原创 Android 系统内的守护进程 - main类服务(5) : debuggerd

以这种方式,而不是产生一个完整的核心转储,tombstone (有望)可以抓到造成崩溃的本质原因,并进行基本的崩溃处理 (crash processing)。如果系统属性 debug.db.uid 的值被设为当前崩溃的进程的 uid,那么 debuggerd 就会把该进程暂停在它最终崩溃的那一瞬间,并等待用户启动 gdbserver (并连上来调试这个进程)。如果是在一个可写的目录中运行这个程序的,那么默认的行为是:在目录中生成一个名为 “core” 的文件。应用在运行时难免会有崩溃的情况。

2023-05-22 19:00:00 1050

原创 Android 系统内的守护进程 - main类服务(4) : keystore

用户的 keystore 的口令被存放在一个 .masterkey 文件中(用根据用户的屏幕解锁密码推出的密钥予以加密),各个 App 的 keystore 则存放在名为 AID_xxxxx的各个对应的文件中。密钥的访问是由 uid 来管理的,因此实际上每个应用都有它自己的私有存储。命令执行的返回码是定义在 system/security/keystore/include/keystore/keystore.h 文件中的,这些返回码会被 keystore_cli 翻译成下表所示的字符串。

2023-05-21 22:58:02 194

原创 Android 系统内的守护进程 - main类服务(3) : installd

installd 这个守护进程是负责安装或卸载 App 包的。不论你的 App 包是应用市场下载安装的,还是用adb install 安装的,最终都还是要调用 installd。installd 守护进程本身,还是被动式的:它会去监听一个由 init 安装的socket,Android 框架产生的命令将由这个 socket 传递给它。class main。

2023-05-21 22:06:50 751

原创 Android系统的问题分析笔记(7) - Android上的C++底层库都有啥 ?

在Android系统中,Bionic是最基础的C库,但它仅仅是基础库。对于开发者而已,工具库才是真正在编写Native程序时更多被使用到的。主要的工具库在系统源码的/system/core目录中,比如:liblog、libcutils、libutils等。!defined。

2023-05-20 13:54:46 1045

原创 如何编译Android内可运行的arm/arm64架构的busybox可执行文件

如何使用NDK编译Android内可以运行的busybox二进制文件呢?此篇做操作说明。

2023-05-19 10:56:31 1556

原创 Android系统的问题分析笔记(6) - Android上的C底层库都有啥 ?

在Android系统中,Bionic是最基础的C库,但它仅仅是基础库。对于开发者而已,工具库才是真正在编写Native程序时更多被使用到的。主要的工具库在系统源码的/system/core目录中,比如:liblog、libcutils、libutils等。

2023-05-19 00:05:18 947

原创 Android系统原理性问题分析 - Android Java框架层的结构

声明在Android系统中经常会遇到一些系统原理性的问题,在此专栏中集中来讨论下。Android系统,为了能够更好的理解Android的Java世界的运行规律,此篇分析Android Java框架的结构。此篇参考一些博客和书籍,代码基于Android 7.1.1,不方便逐一列出,仅供学习、知识分享。1 Java框架层结构Android系统Java 框架层库的实体内容主要有 3个,如下所示:Java 框架库:framework.jarJava 服务库:services.jar资源包:fr

2023-05-18 20:00:00 649

原创 Android系统的问题分析笔记(5) - Android上的C语言基础库Bionic里都有啥

Bionic 提供C 语言基础库(简称 C 库)的功能,它是一个专为嵌入式系统设计的轻量级标准库实现。Bionic的源码和头文件在 bionic/目录中。相对Linux操作系统中的 C 库实现glibc,Bionic 的体积和内存占用量更小。Bionic 支持标准C和 C++库的绝大部分功能,支持数学库及 NPTL 线程库。其中还有自己实现的 Linker 及 Loader,用于动态库的创建和加载。

2023-05-17 20:00:00 952

原创 Android系统原理性问题分析 - Dalvik/ART上的进程与线程

所以线程池线程一共会生成3 个。PoolThread类继承了Thread类,调用的IPCThreadState的joinThreadPool函数,将当前线程注册到Binder驱动程序中,这样创建的线程就加入了Binder线程池中,新创建的应用程序进程就支持Binder进程间通信了,只需要创建当前进程的Binder对象,并将它注册到ServiceManager中就可以实现Binder进程间通信,而不必在意进程间是如何通过Binder通信的。Bionic 的线程机制是 Dalvik/ART 线程的机制的基础。

2023-05-16 22:07:47 475

原创 Android系统原理性问题分析 - Android Native程序的结构设计方式

Android 系统默认的实现中,media 守护进程中的MediaPlayerService、CameraService 和AudioFlinger 等类使用的是这种典型的结构,SurfaceFlinger 情况类似,但是默认情况下没有独立运行的守护进程。Android 的本地程序基于 Linux 中标准 C和C++的开发,这部分内容和其他系统的思路相同比较特殊的地方是Android 的本地程序使用 Android 中的通信机制,由此也产生了特殊的程序结构。这与程序的具体实现相关,而和程序通信结构无关。

2023-05-16 20:00:00 991

原创 Android系统的问题分析笔记(4) - Android设备硬件基础

典型的Android手机/平板硬件架构是怎么样的?

2023-05-15 22:53:12 640

原创 Android 系统的分区和文件系统(5)- Android Framework层上的工具和命令

比如 IStatusBarService.java中的有关摘录,此文件在:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/statusbar/IStatusBarService.java。正如我们前面看到的,已经存在许多的系统服务。默认情况下,如果没有系统服务名称作为参数,dumpstate 它可以查询系统的好几个部分来给你提供完整的系统状态的快照。

2023-05-15 19:24:16 978

epoll 的事件模型 实例

epoll 的事件模型 实例

2023-06-10

Linux 线程池(Thread Pool)的实现原理 实例

Linux 线程池(Thread Pool)的实现原理 实例

2023-06-10

单路情况下的CS模型 tcp-socket udp-socket ud-socket

tcp_socket udp_socket ud_socket

2023-05-26

多路并发情况下的CS模型实例 select poll epoll

多路并发情况下的CS模型实例 select poll epoll

2023-05-24

fastboot_usb_driver.zip

window fastboot驱动

2021-08-25

ffmpeg_x264.tar.gz

我博客《如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)》移入Android7.1源码中的第三方库ffmpeg x264的工程文件夹

2020-03-17

ffmpeg-4.0.2.tar.gz

我博客《如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)》使用的ffmpeg源码

2020-03-17

x264.tar.gz

我博客《如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)》里使用的x264源码

2020-03-17

我的博客中《关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)》源码包

我的博客中《关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)》源码包

2017-09-24

本人编译的iconv.so 与其头文件

我在做一个加密芯片项目时,需要用到此库其中的一些函数,就编译了这个动态库。 要注意的是,不同版本的iconv里的函数名字有时候不同: 1.有的版本是iconv_open、iconv_close这样的名字。 2.有的版本是libiconv_open、libiconv_close这样的名字。 修改办法是: 1.如要iconv_open、iconv_close这样的名字,需在iconv.h中加入#define LIBICONV_PLUG即可。 2.如要libiconv_open、libiconv_close这样的名字,需在iconv.h中移除#define LIBICONV_PLUG即可。

2017-09-18

Z-Stack_Home_1.2.2a.part3.rar

包括以下例程: SampleDoorLock SampleDoorLockController SampleSwitch SampleTemperatureSensor SensorTag

2017-09-18

Z-Stack_Home_1.2.2a.part2.rar

包括以下例程: SampleDoorLock SampleDoorLockController SampleSwitch SampleTemperatureSensor SensorTag

2017-09-18

Z-Stack_Home_1.2.2a.part1.rar

包含一下例程: SampleDoorLock SampleDoorLockController SampleSwitch SampleTemperatureSensor SensorTag

2017-09-18

空空如也

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

TA关注的人

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