自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 资源 (1)
  • 收藏
  • 关注

原创 深度刨析Android 进程保活

什么是保活?保活就是在用户主动杀进程,或者系统基于当前内存不足状态而触发清理进程后,该进程设法让自己免于被杀的命运或者被杀后能立刻重生的手段。保活是”应用的蜜罐,系统的肿瘤“,应用高保活率给自己赢得在线时长,甚至做各种应用想做而用户不期望的行为,给系统带来的是不必要的耗电,以及系统额外的性能负担。提升进程优先级,降低被杀概率比如监听SCREEN_ON/OFF广播 启动一像素的透明Activity启动空通知,提升fg-service进程被杀后,重新拉起进程监听系统或者第3方广播拉起进程。

2024-03-20 11:16:26 1150

原创 Android 系统开发工具大全

下面推荐的是我常用的工具,如果你有好用的开发工具欢迎在评论区留言讨论交流。

2024-03-20 11:15:19 1192

原创 Android 之 GMS 认证知多少?

GMS认证是一项大工程,需要花费大量的人力(至少3人负责)、物力(标配:3台设备+3台主机)、财力(20万RMB左右)、时间(周期最低2个月),不建议新手去接手这件差事,最好是有老司机全程带着搞一遍。测试期间很轻松,基本不需要干啥,都是全自动化的,但是测试结束就有得忙了,随随便便成千上万个fail项就让人头皮发麻,所以,这个烫手山芋很多人都难以下咽,但作为一个合格的framework开发者,很有公司都要求有GMS认证的经验。

2024-03-19 18:15:28 3573

原创 深度解析 Android 系统属性

在 Android 系统中,为统一管理系统的属性,设计了一个统一的属性系统,每个属性都是一个 key-value 对。我们可以通过 shell 命令,Native 函数接口,Java 函数接口的方式来读写这些 key-vaule 对。init 进程在启动会去加载后缀为 .prop 的属性文件, 将属性文件中的属性加载到共享内存中, 这样系统就有了默认的一些属性。Android O 以后,属性的 Selinux 的规则变得复杂起来了,今天我们先看一个简单的例子,做基本的了解。

2024-03-19 16:56:08 1645

原创 如何添加 Android Native 系统服务

工作学习过程中,我们可能需要去阅读不同类型的 Native 系统服务,也有可能会自己去完成一个 Native 系统服务。无论哪种情况都需要我们了解基本的 Native 如何去添加。就像我们写 Android App 得先了解一下四大组件才行。接着我们就来看看如何添加一个 Android Native 系统服务。

2024-03-19 16:07:13 844

原创 Android 系统如何添加开机自启动 Shell 脚本

再回到权限那里,我们的脚本调用了 echo log 两个命令,这两个命令会通过执行 toybox_vendor 来实现,当执行 toybox_vendor 时,我们就需要 toybox_vendor 的打开,读取,执行权限,以及配置 domain 转换(A 程序到 B 程序都需要配置域转换)。很多时候,我们想在系统启动的时候干一些“私活”,这个时候,我们就可以添加开机自启动的脚本来完成。启动时打的 log,以及启动相关的属性值均正常,证明我们添加的脚本执行成功了。需要注意的是 shebang 的内容是。

2024-03-19 16:03:00 2075

原创 Android 源码中 内置系统App(整个APP源码方式集成)

我们这里尝试修改 JNIApp,让其引用到我们的 libmymath 库。# 添加以下内容# 下面这行注释掉即可最后重新编译,执行虚拟机即可。

2024-03-19 15:54:31 2113

原创 Android 源码中如何添加 C C++、Java 库

在目录下创建以下的目录和文件是一个动态库。其Android.bp接着修改我们之前添加的 hello 项目:修改编译完成启动虚拟机后,就可以通过 adb shell 运行我们的 hello 程序了。

2024-03-19 15:43:46 853

原创 Android 系统源码中添加可执行程序

本文基本Android 10的源码环境。

2024-03-19 15:40:46 1324

原创 Android 如何在源码中添加 Product

在 App 的开发中,我们要去打渠道包,根据不同应用市场的要求打包出不同的 apk 包。同样的道理,Android 的系统源码,经过简单的配置,可以打包出不同的系统镜像,用于不同的产品。例如rk3326_q,rk3566_t ,rk3568 均源于瑞芯微平台。Android 系统源码是通过配置文件来实现 “分包” 的,配置文件将我们的源码配置为了不同的 Product,每一个 Product 适用于特定的硬件产品,这一系列的配置文件我们称为 Product。我们在编译源码之前需要执行 lunch :这里的

2024-03-19 15:33:38 778

原创 Android 系统源码快速入门

虚拟机安装开发环境搭建下载编译源码从一个简单的实际开发需求体验 Framework 开发。

2024-03-19 14:00:56 1222

原创 构建Android模拟器系统运行镜像(系统固件)

从其他镜像目录(如android-sdk\system-images\android-33\default\x86_64)移动一个package.xml过去。我们需要通过下面的命令设置环境,选择要编译的目标product并启动编译过程。可以启动http server(如:python -m http.server 8888),使用repo-sys-img.xml部署镜像源,此处不详细介绍。要想通过emulator命令启动我们编译好的系统镜像,需要将镜像打包并部署。的源码,可以通过下面的命令。

2024-03-19 10:36:27 988

原创 startActivity启动过程分析

的整体流程与startService启动过程分析非常相近,但比Service启动更为复杂,多了stack/task以及UI的相关内容以及Activity的生命周期更为丰富。Activity启动发起后,通过Binder最终交由system进程中的AMS来完成,则启动流程如下图:接下来,从源码来说说每个过程。本文详细startActivity的整个启动流程,流程[2.1 ~2.4。

2024-03-18 17:09:39 751

原创 startService启动过程分析

本文将开启对ActivityManagerService的分析。ActivityManagerService是Android的Java framework的服务框架最重要的服务之一。对于Andorid的Activity、Service、Broadcast、ContentProvider四剑客的管理,包含其生命周期都是通过ActivityManagerService来完成的。对于这四剑客的介绍,此处先略过,后续博主会针对这4剑客分别阐述。在整个startService过程,从进程角度看服务启动过程。

2024-03-18 17:06:23 779

原创 Android 内存分析-指令

Item全称含义等价USS物理内存进程独占的内存PSS物理内存PSS= USS+ 按比例包含共享库RSS物理内存RSS= USS+ 包含共享库VSS虚拟内存VSS= RSS+ 未分配实际物理内存故内存的大小关系:VSS >= RSS >= PSS >= USS。

2024-03-18 16:48:05 1069

原创 Android系统启动-zygote篇

Zygote是由init进程通过解析init.zygote.rc文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是App_main.cpp,进程名为zygote。class mainservicemanager进程被杀;(onresart)surfaceflinger进程被杀;(onresart)Zygote进程自己被杀;system_server进程被杀;(waitpid)

2024-03-18 16:42:58 790

原创 ActivityManagerService 启动过程

本文以AMS为主线,讲述system_server进程中AMS服务的启动过程,以startBootstrapServices()方法为起点,紧跟着startCoreServices(), startOtherServices()共3个方法。创建AMS实例对象,创建Andoid Runtime,ActivityThread和Context对象;setSystemProcess:注册AMS、meminfo、cpuinfo等服务到ServiceManager;

2024-03-18 16:29:07 1080

原创 Android系统启动-SystemServer(二)

该方法所创建的服务:ActivityManagerService, PowerManagerService, LightsService, DisplayManagerService, PackageManagerService, UserManagerService, sensor服务.该方法比较长,有近千行代码,逻辑很简单,主要是启动一系列的服务,这里就不具体列举源码了,在第四节直接对其中的服务进行一个简单分类。到此,系统服务启动阶段完成就绪,system_server进程启动完成则进入。

2024-03-18 16:22:51 737

原创 Android系统启动-SystemServer(一)

本文以AMS为主线,讲述system_server进程中AMS服务的启动过程,以startBootstrapServices()方法为起点,紧跟着startCoreServices(), startOtherServices()共3个方法。创建AMS实例对象,创建Andoid Runtime,ActivityThread和Context对象;setSystemProcess:注册AMS、meminfo、cpuinfo等服务到ServiceManager;

2024-03-18 16:17:33 764

原创 Android logd日志原理

无论是Android系统开发,还是应用开发,都离不开log,Androd上层采用logcat输出log。当日志输出过于频繁或者日志占用内存过大时,会有日志裁剪的动作:每次裁剪日志行数等于总行数的10%,并且需要大于等于4行,且不超过256行,优先裁剪黑名单以及log打印最多的那个uid, 以及system uid中打印日志最多的pid进程中的日志,也可以设置不裁剪的白名单。比如persist.logd.size.system;LOG_BUFFER_SIZE, 即256k;

2024-03-18 15:46:16 1140

原创 彻底理解Android ANR机制 一篇就够了

不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(ANR,Application Not Responding)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。绝大多数人对ANR的了解仅停留在主线程耗时或CPU繁忙会导致ANR。面试过无数的候选人,几乎没有人能真正从系统级去梳理清晰ANR的来龙去脉,比如有哪些路径会引发ANR?有没有可能主线程不耗时也出现ANR?如何更好的调试ANR?

2024-03-18 15:03:43 2045

原创 深度刨析Android ANR触发原理

ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。那么哪些场景会造成ANR呢?Service Timeout:比如前台服务在20s内未执行完成;BroadcastQueue Timeout:比如前台广播在10s内未执行完成。

2024-03-18 15:00:30 878

原创 Android Framework基础之JNI

JNI(Java Native Interface,Java本地接口),用于打通Java层与Native(C/C++)层。这不是Android系统所独有的,而是Java所有。众所周知,Java语言是跨平台的语言,而这跨平台的背后都是依靠Java虚拟机,虚拟机采用C/C++编写,适配各个系统,通过JNI为上层Java提供各种服务,保证跨平台性。相信不少经常使用Java的程序员,享受着其跨平台性,可能全然不知JNI的存在。

2024-03-18 14:42:10 1149

原创 PackageManagerService 应用安装管理流程解析

PackageManagerService(简称PMS)是Android系统中的一个核心服务,主要负责管理设备上安装的应用程序包(APK)。它是Android应用框架中的一个重要组件,为其他应用和系统组件提供了应用程序包的查询、安装、卸载等功能。

2024-03-18 11:53:30 955

原创 Android 开机启动的核心系统服务:你了解了吗?

Android系统提供了一系列核心服务,这些服务为设备提供了基础且关键的功能。以下是一些Android的核心服务及其功能概述:

2024-03-18 10:21:37 1263

原创 Android Framework开发之Linux +Vim命令

在Android源码开发中,Linux命令的运用是至关重要的。这些命令不仅帮助开发者有效管理文件、目录和系统资源,还能在源码编译、调试和排错过程中发挥关键作用。以下是对Android源码开发中常用Linux命令的更详细介绍:ls:列出目录内容。:改变当前工作目录。:显示当前工作目录的完整路径。:复制文件或目录。:移动或重命名文件或目录。:删除文件或目录。:创建新目录。:删除空目录。uname:显示系统信息。:显示磁盘空间使用情况。:实时显示系统状态。find:在目录树中查找文件。

2024-03-16 18:18:03 1096

原创 SeAndroid 安全策略机制

在Android系统中,应用有时需要访问或修改特定的系统属性。为了限制哪些应用可以访问或修改这些属性,我们可以使用seAndroid的策略来控制。

2024-03-16 17:51:00 1147

原创 Android Binder机制解析

binder机制是一种基于Client-Server架构的IPC(Inter-Process Communication,进程间通信)机制,它允许不同进程之间进行高效的通信和数据交换。Binder机制在Android系统中扮演着至关重要的角色,为各种系统服务和应用程序之间的交互提供了支持。

2024-03-16 17:21:06 1029

原创 Android 系统的启动过程

Framework层的启动流程在Android系统中涉及多个关键组件和交互。这些组件共同协作,确保系统的正常运行和应用程序的启动。需要注意的是,Framework层的启动流程是一个复杂且高度交互的过程,涉及多个组件和服务。上述只是其中一些主要的组件和交互,实际上还有许多其他细节和子组件参与其中。在Android系统中是一个复杂且关键的过程,涉及多个组件和服务的启动、初始化以及相互交互。

2024-03-16 16:40:02 1179

原创 Android系统启动-Init篇

init.rc文件是 Android 系统中非常重要的一部分,它定义了系统在启动过程中的行为和服务的初始化顺序。在 RK3566 Android 11 的环境中,init.rc文件的结构和语法与其他 Android 版本大致相同。下面我将逐句解释init.rc文件中的典型内容:当然可以,我会尽量更详细地解释init.rc文件中的内容,并结合 RK3566 Android 11 的具体实例来说明。

2024-03-16 16:16:59 415

原创 如何用shell脚本构建Android模块

在Android源码编译过程中,shell脚本起到了至关重要的作用。它们不仅用于自动化构建过程,还用于执行各种系统级的任务和测试。下面将详细介绍shell脚本在Android源码编译中的用法,并给出多个具体例子。

2024-03-16 15:53:00 479

原创 Android FrameWork基础之Makefile

Makefile是用于自动化构建项目的工具,尤其在Android源码编译中扮演着至关重要的角色。Makefile文件包含了构建过程中所需的各种规则、依赖关系和命令。通过Makefile,我们可以方便地编译、链接和安装项目。

2024-03-16 15:35:57 1121

原创 Android Framework 之 Python

Python语言在Android中的应用主要体现在:开发脚本和自动化任务:Python因其简洁易读的语法和强大的库支持,非常适合用于编写脚本以自动化Android设备上的任务。例如,使用Python编写的脚本可以自动备份文件、管理联系人、发送短信或电子邮件等。这些脚本可以通过Android设备上的Python解释器或第三方应用运行

2024-03-16 15:00:58 904

原创 Android Framework之Shell脚本语言

Shell脚本是Linux/Unix环境下的一种自动化工具,通过编写脚本,我们可以将一系列命令组合起来,实现自动化执行。:脚本的第一行通常是一个shebang,它告诉系统使用哪个解释器来执行脚本。Shell脚本支持变量,可以存储各种类型的数据(如字符串、数字等)。当脚本出现问题时,调试是非常重要的。Shell脚本中也可以定义函数,以便重复使用代码块。Shell脚本支持一维数组,可以用来存储多个值。要使脚本可执行,你需要为其添加执行权限。开头的行被视为注释,它们不会被执行。:脚本的主体由一系列的命令组成。

2024-03-16 11:56:53 316

原创 Android Framework基础之C语言入门

函数的定义包括函数返回类型、函数名、参数列表和函数体。// 函数体// 执行特定任务的代码:函数返回值的类型。如果函数不返回任何值,则使用void关键字。:函数的唯一标识符,用于在程序中调用该函数。:函数接受的参数列表,由逗号分隔。参数列表是可选的,如果函数不需要任何参数,则省略。函数体:包含执行特定任务的代码块。类型说明符 数组名[常量表达式];类型说明符:指定数组中每个元素的数据类型,如intcharfloat等。数组名:用于标识数组,遵循标识符的命名规则。常量表达式。

2024-03-16 11:40:03 1109

原创 Android Framework 基础篇 之 C++

C++是一种广泛使用的编程语言,它是C语言的扩展,增加了面向对象的特性。对于初学者来说,掌握C++的基本语法是学习的重要一步。在本文中,我们将介绍C++的一些基本语法,帮助你快速入门。

2024-03-16 10:47:44 933

原创 Android FrameWork 学习路线

Android Framework 涉及的行业相当广泛,可以是手机,汽车,手表,冰箱,微波炉,电视,机顶盒,空调等等设备。Framework 学习门槛也较高,而且需要的调试环境也需要成本,但薪资也比大部分 App 开发岗位高出不少。如果能系统地学习Framework,就显得更加尤为重要以下是一张android 经典框架图·Linux kernel层,驱动程序·HAL层,封装驱动硬件操作,向 App 提供统一稳定的驱动操作接口·Native层,C/C++库以及Java 虚拟机。

2024-03-16 09:54:41 1277

原创 手把手教你搭建 Android MVI架构: MVI + kotlin + Flow

Android MVI是一种用于构建Android应用程序的架构模式,其核心思想在于实现单向数据流和唯一可信数据源。在MVI架构中,应用程序的状态管理得到简化,并且用户界面与业务逻辑之间的交互更加清晰和规范。UIState。

2024-03-15 17:27:36 3930 1

原创 Android Kotlin 一篇就学会了

从 2017年,Google 宣布 Kotlin 成为 Android 官方开发语言。Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,可以完美运行在 Java 环境。1.语法简洁、高级2.空指针安全3.完全兼容Java:可Kotlin 和 Java 两种语言混合开发4.函数式编程:扩展函数、支持Lambda表达式5.类型推断:无需指明类型6.强大的协程:处理线程问题。

2024-03-13 15:41:57 638

原创 Android kotlin开启协程的几种方式

如果需要更精细地控制协程的生命周期,你可以创建自定义的。这允许你手动管理协程的启动和取消。kotlin复制代码= null// 协程体job?.cancel()// 使用// 当需要取消协程时。

2024-03-12 14:51:20 770

Android11.0最新Framework解析.zip

《Android 11.0最新Framework解析.pdf》是一本针对Android 11.0系统框架的深入解析之作,旨在帮助读者全面理解和掌握Android 11.0框架的最新特性和实现机制。 本书首先概述了Android 11.0的整体架构和设计理念,通过清晰的图表和详细的文字描述,让读者对Android 11.0的框架结构有一个宏观的认识。接着,书中深入剖析了Android 11.0的核心组件和关键特性,包括Activity管理、Service通信、BroadcastReceiver机制等,详细解释了它们的工作原理、实现细节以及最佳实践。 此外,本书还重点关注了Android 11.0在性能优化、隐私保护、安全性等方面的新特性和改进。通过对这些方面的深入剖析,读者可以了解到Android 11.0是如何在保持系统稳定性和兼容性的同时,不断提升用户体验和开发者效率。 在内容安排上,本书采用了循序渐进的方式,从基础知识讲起,逐步深入到高级话题。每一章节都配备了丰富的实战案例和代码示例,帮助读者更好地理解和掌握相关知识点。同时,书中还穿插了大量的图表和插图,使得内容更加生动、易

2024-03-19

Android MVI框架模板代码

Android MVI框架模板代码

2024-03-15

Android 系统签名工具,解压可用 自带openssl环境

Android 系统签名工具,解压可用 自带openssl环境 目前上传的mtk的系统签名文件,如果是其他平台的环境 自行更换platform.pk8 platform.x509.pem文件即可

2024-02-29

APK反编译全家桶,apk二次打包签名必备

APK反编译全家桶

2023-10-18

精简版jre.zip 64位 1.8.0压缩后才20M

适合需要通过java开发桌面程序的小朋友

2021-08-09

空空如也

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

TA关注的人

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