- 博客(357)
- 资源 (3)
- 收藏
- 关注
原创 OTA瘦包之android:extractNativeLibs
Android OTA升级分两种方式:1、OTA全量包升级2、OTA差分包升级OTA全量升级包是指系统整编出完整的OTA升级包,OTA差分升级包是基于当前版本的target包和上一个版本的target包对比之后制作出来的。注:非A/B模式已被Android 15废弃既然OTA升级包太大会造成各种各样的问题,那么我们可以考虑缩减OTA包大小来提升升级过程中的稳定性。下面我们就讨论应用android:extractNativeLibs配置对OTA包大小的影响。
2025-08-06 10:50:29
745
原创 Android应用管控之挂起
当应用被挂起后,打开应用的时候,系统会弹窗提示,如下:应用被设置成挂起状态后,启动过程中会进行拦截,并进行弹窗提示。当然我们也可以使用我们自定义的弹窗,那么就需要替换掉系统中的弹窗。
2025-08-02 19:54:56
433
原创 Android14 动态设置默认Launcher (二)
前文提到了使用RoleManager进行默认主页设置,这里提供另一种方案大家应该都见过选择默认主页的系统选择提示框,比如这种:如果当前没有设置默认主页,那么就会弹窗提示设置默认主页。那么我们可以走系统自带流程,做默认选择应用动作直接跳过弹框选择操作,来实现默认主页设置。找到代码:frameworks/base/core/java/com/android/internal/app/ResolverActivity.java 做进一步分析。
2025-08-02 10:45:48
412
原创 Android14 动态设置默认Launcher (一)
说起动态设置默认Launcher,其实在原生设置中是有这个功能的。如下图:这里可以看到我放了3个Launcher,再加默认的Launcher3 总共4个选中其中的Launcher,那么该应用就是默认Launcher了这个是当前系统默认的Launcher做为默认主页最直观的表现就是,在其它APP中从底部快速上滑会回到默认Launcher中当前默认Launcher快速上滑效果同样我们在其它APP中从底部快速上滑会回到默认Launcher中设置的默认Launcher快速上滑效果。
2025-08-02 10:40:16
317
原创 ASFP调试aosp源码
Android studio for platform,简称asfpgoogle官方开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)
2025-08-01 22:16:39
401
原创 系统预装应用卸载原理分析 (七)
系统应用可以反射android.content.pm.IPackageManager$Stub获得deletePackageAsUser进行删除系统应用注意:deletePackageAsUser会清除数据,但不会卸载更新。即如果系统应用更新后,会存在两个apk,一个在system,一个在data。如果要删除data下的更新,可以先调用卸载接口再调用deletePackageAsUser。
2025-07-30 16:19:39
328
原创 Android各版本 实现系统预装应用卸载后恢复安装 (六)
接着上文 Android各版本 实现系统预装应用及更新安装一键全部卸载 (五) 讲到卸载系统应用,那么怎么恢复安装?接着分析恢复安装通过反射调用Android原生接口实现反射installExistingPackageAsUser恢复安装,恢复安装之前可以通过packageManager.getApplicationInfo判断系统是否还存在安装包,否则可以跳应用商店进行安装。
2025-07-30 16:16:27
149
原创 Android各版本 应用安装之静默安装/卸载平台接口实现 (四)
将平台接口文件都放置于下面的路径下:java文件:CloudComputerAgent.java这个文件是APP调用的总入口= null) {Java文件:PackageManager.java这个文件提供了静默安装及卸载的调用/*** 包管理模块*/= null) {//推荐厂商在实现是通过调用有权限的服务端进行安装,因此这里会跨进程调用到系统应用中进行具体的静默安装与卸载/*** APP通过此接口静默安装应用。
2025-07-30 16:11:07
322
原创 Android各版本 应用安装之静默安装/卸载SDK实现 (三)
前两章分析了Android应用安装与卸载的各种方式:Android14 应用安装之方法汇总 (一)Android14 应用安装之静默安装 (二)下面我们就兼容Android各版本实现静默安装与卸载的SDK。根据前两篇文章的描述,应用要实现静默安装与卸载,那么该应用必须为系统应用才有权限来执行。也即下面我们实现的SDK只能供系统应用来对接。怎么将应用变成系统应用,这里不再赘述!
2025-07-30 16:07:27
265
原创 Android14 应用安装之方法汇总 (一)
首先准备马甲(静默安装需要调用的接口)由于调用了系统未公开的接口,而这些接口有些是通过aidl实现的,下面我们把需要的马甲修改一下。当下载到系统里面的apk权限不够时(静默安装提示权限问题, 有可能当前apk只有(-rw-------)权限 ) 可以使用下面三种方式修改权限。上诉安装不仅可以安装新的apk(从无到有),也可以用于更新旧的apk(版本更新),在进行版本更新的时候,必须保证两个apk的签名是一致的。安装成功的回调接口IPackageInstallObserver.java(修改过的马甲)
2025-07-30 13:49:46
913
原创 深入了解Android应用程序签名
应用程序签名是将数字签名应用于 Android 应用程序(APK 文件)的过程。它使用密钥对对应用程序进行加密,确保在应用程序发布和分发过程中的完整性和真实性。验证完整性:签名可确保 APK 文件在传输或分发过程中没有被篡改或损坏。验证真实性:签名允许用户验证应用程序的来源和开发者身份,以确保 APK 来自可信的来源。安全性:签名可以防止恶意用户在未经授权的情况下更改应用程序的代码或资源。apksigner 是 Android SDK 中的一个命令行工具,用于对 APK 文件进行签名和验证。
2025-07-30 12:04:08
987
原创 Android14 启动launcher流程 (二)
手动清除用户通过系统“设置” -> “应用” -> “默认应用”或“应用信息”页面。最常用、最标准的方式,赋予用户完全的控制权。代码清除应用调用PackageManager.clearPackagePreferredActivities()。仅限于系统应用或具有特殊权限的应用。普通应用只能引导用户去手动操作。系统清除Android系统卸载应用、OTA升级、更新应用等。被动触发,是系统保持自身健康和兼容性的机制。
2025-07-30 11:33:18
733
原创 Android14 启动launcher流程 (一)
触发点:通知系统就绪 (决策核心:调用。关键逻辑:方法在发现没有任何前台应用可以恢复时,会调用。执行点:遍历所有屏幕,并为每个屏幕调用。最终指令:创建一个标准的),并交给去完成最后的启动流程。
2025-07-30 11:29:56
532
原创 Android14 Launcher3 定制主页丝滑使用Recents功能 (三)
/packages/apps/Launcher3/quickstep/res/drawable-xxhdpi,这里面放置背景资源。指定窗口动画为NoAnimation,不给窗口指定动画。修改前的theme为:LauncherTheme。修改后的theme为:RecentsTheme。Recents功能未修改前。修改前-自定义主页快速上滑。修改前-其它app快速上滑。修改后-自定义主页快速上滑。修改后-其它app快速上滑。修改前-其它app上滑。修改后-自定义主页上滑。修改后-其它app上滑。
2025-07-29 22:34:45
969
原创 Android14 系统Wallpaper详解之ImageWallpaper
集成自WallpaperService.EngineCanvasEngine是ImageWallpaper实现的用于执行具体的壁纸绘制相关逻辑的执行者。其重写了父类Engine的一些方法来实现自定义的行为。按照顺序执行,CanvasEngine先执行onCreate方法,并在改方法内部根据设备的相关信息初始化相关参数//在WallpaperService的onBind方法执行时,会触发改方法的执行。//用于获取设备尺寸,然后根据该信息更新相关尺寸参数@Override。
2025-07-29 21:29:29
227
原创 Android14 系统窗口动画分析 (二)
最终根据调用链路追踪到了SurfaceAnimator.java文件中继续看看getSurfaceControl的具体实现。
2025-07-29 21:22:43
749
原创 Android14 系统窗口动画分析 (一)
res/values/styles.xml中定义动画style创建具体的动画文件:res/anim/enter.xmlres/anim/exit.xml2、代码中动态引入动画资源xxx/MyActivity.javaxxx/MyService.java二、应用显示弹窗窗口动画案例service中弹窗动画资源res/values/styles.xmlres/anim/dialog_enter_anim.xmlres/anim/dialog_exit_anim.xml三、系统源码分析通过w
2025-07-29 15:57:28
761
原创 AndroidStudio调试aosp源码 (模块、gradle配置)
接着我们继续搭建aosp源码阅读/调试平台前面的文章我们提到了怎么导入aosp源码,那么接下来,我们就完整的导入某个模块的源码,来进行查阅和调试代码。
2025-07-29 14:05:50
958
原创 AOSP源码查看工具对比
在奔赴远方的星河之前,请先折竹为筏,聚沙成台。工具是延伸掌纹的舟楫,平台是托举理想的云阶。在AOSP系统开发过程中,阅读 AOSP (Android Open Source Project) 源码是至关重要的环节。然而,如何构建一个高效、便捷的阅读环境,同样是不容忽视的关键挑战。本文将介绍利用多种工具和方法阅读 AOSP 源码的高效实践,并对比分析其主要优缺点。
2025-07-28 23:23:48
1018
原创 Android14 Launcher3 定制主页丝滑使用Recents功能 (二)
我们接着继续分析在上文中分析的不管是将Launcher3业务直接打包成aar使用还是将与systemui的跨进程业务提炼出来,在自己的主页实现Recents功能,都是不行的,或者说代价太大。那么我们再继续分析另外一种方式:修改Recents最近任务出现的整个动画链路,以及修改动画过渡效果未修改前,展示如下:手势模式又分为两种情况:第一种:第三方应用 (非Launcher) 底部上滑第二种:Launcher底部上滑。
2025-07-28 22:47:37
1001
原创 Android14 Launcher3 定制主页丝滑使用Recents功能 (一)
aosp默认主页是Launcher3,其中Recents功能就属于Launcher3的功能。考虑这样一个问题,如果设备默认主页需要使用我们自己开发的主页,那么当向上滑动显示Recents最近任务列表的时候,是个什么效果:当前窗口缩小并且慢慢透视,能看到桌面壁纸,紧接着同步显示缩略图,并且缩略图可以跟着手指移动,当最后放手的时候,显示出RecentsActivity,那么这几个步骤显示下来,会感觉眼花缭乱。那么我们怎么优化呢? 当向上滑动的时候直接在当前窗口展示缩略图,最后放手的时候显示出RecentsAct
2025-07-28 22:04:03
578
原创 Android14 系统Wallpaper详解 壁纸窗口分析 (二)
接着 《Android14 系统Wallpaper详解 壁纸窗口分析 (一)》上一步中我们分析了WallpaperWindowToken的挂载。接下来我们继续分析./frameworks/base/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java./frameworks/base/core/java/android/service/wallpaper/WallpaperService.java根据窗口添加流程
2025-07-26 18:33:14
313
原创 Android14 系统Wallpaper详解 壁纸窗口分析 (一)
通过dumpsys window windows确定壁纸显示信息可以确定壁纸显示控制是在systemui进程中的ImageWallpaper另外说明:静态壁纸运行在systemui,由systemui实现WallpaperService动态壁纸运行在各业务进程,由各业务进程实现WallpaperService。
2025-07-26 18:26:34
654
原创 Android14 系统Wallpaper详解 壁纸服务分析
安卓的动态壁纸可以归属到SystemUI中,是SystemUI管理的一部分,安卓支持静态壁纸,同时也支持动态壁纸(level 7后加入)可以从设备的内部或者是外部存储中选择一个图片资源来作为静态壁纸,此外也可以设置壁纸跟随时间的变化进行一些变化(例如切换不同的图片资源),这也是安卓的特色功能之一。需要说明的是当某个应用通过系统的接口设置为壁纸应用后,会启动一个壁纸服务,该服务的优先级很高,从某种程度上来说是不会被系统主动杀死的(但是可以被手动停止)。
2025-07-26 18:17:25
625
原创 Android14 系统Wallpaper详解 锁屏透看壁纸和桌面透看壁纸的切换
桌面Activity的配置主题xml设置一个类似showallpaper的属性既可以,就可以让桌面后面显示壁纸了。
2025-07-26 18:11:41
863
原创 Android14 Launcher3 Recents缩略图数据来源剖析
在进入桌面最近任务时候会看到运行过的Task相关卡片记录,每个运行过的Task都会有一个自己的TaskView。那么这个TaskView中显示的缩略图画面是怎么获取的?这里的获取分为2种情况:1、系统没有重启,桌面显示退到后台的Task缩略图画面2、系统重新启动即关机重启,发现TaskView也可以正常显示缩略。
2025-07-26 17:53:36
866
原创 Android10/14 Launcher3 Recents功能流程分析
以上就是Recents功能在初始化过程中涉及到的关键类,流程图总结一下:(Android10)Android10Android10UI 层 (RecentsView): 需要数据来展示,并发起请求。模型层 (RecentsModel): 作为中间层,管理数据缓存(图标、缩略图)和数据源(任务列表),并处理数据更新和分发。数据源层 (RecentTasksList): 负责直接与系统服务交互,获取原始的最近任务列表,并提供简单的缓存机制。。
2025-07-26 17:45:48
780
原创 AndroidStudio调试aosp源码 (ipr、iml工程文件)
,在弹出的窗口中左边栏中选择"Modules”,中间的窗口选择"Android"(首字母大写的那一个),而后在右边的窗口中选择"Structure"。“,中间的窗口选择"android”(首字母小写的那一个),在弹出的窗口中左边栏中选择"Modules",而后在右边的窗口中选择"Dependencies"。"android.iml"和"android.ipr"一般是"只读"的属性,我们这里建议大家,把这两个文件改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况,执行如下两条命令即可。
2025-07-26 17:33:49
660
原创 AndroidStudio调试aosp源码 (gradle配置)
4、完成以上操作,同步代码,可以编译apk了。如此方便的使用AndroidStudio的断点debug和跟踪代码流程。在buildscript同层级下面增加sourceSets:(内容可根据需要添加)2、打开demo工程 project下的build.gradle。3、配置project下的build.gradle。1、创建一个工程demo,确保能正常编译通过。5、完整的build.gradle如下。这里直接引入服务器中的源码。
2025-07-26 17:18:27
239
原创 VsCode调试aosp源码
下面简单介绍下vscode环境搭建点击官方地址,点击Download for Windows下载下载完后,双击打开安装安装流程这里不再赘述。
2025-07-26 16:53:59
895
原创 postman模拟post请求的几种请求体
postman的几种参数格式post类型的body中可以存放任意的内容格式,浏览器可以根据请求头中指定的content-type类型对请求体进行解析。下面介绍postman如何对四种典型的请求体进行模拟。form-data即multipart/form-data,它将表单的数据组织成Key-Value形式,用分隔符boundary(boundary可任意设置)处理成一条消息。由于有boundary隔离,所以既可以上传文件,也可以上传参数。POST HTTP/1.1Host: test..
2020-10-22 01:25:11
2285
转载 Http协议请求方法及body类型
8种请求方法1) get请求指定的页面信息,并返回实体主体。 2) post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。3) HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 4) OPTIONS返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘...
2020-10-22 01:13:43
2259
转载 http的请求体body的几种数据格式
http的请求体body的几种数据格式 multipart/form-dataapplication/x-www-from-urlencodedrawbinarypostman中 Params和Body的区别 multipart/form-data 以表单形式提交,主...
2020-10-22 01:00:48
1858
转载 HTTP请求格式、响应格式及正文部分的MIME类型
HTTP请求格式: HTTP协议规定,HTTP请求由3部分构成: 请求方法、URI和HTTP协议的版本请求头请求正文 1.请求方法、URI和HTTP协议的版本: HTTP请求的第一行包括请求方法、URI和协议版本这3项内容,以空格分开: POST /hello.jsp HTTP/1.1 URI用于标识要访问的网络资源,在HTTP请求中,通常只要给出服务器的根...
2020-10-22 00:50:45
1798
实现系统预装应用及更新安装一键全部卸载
2025-07-25
Android各版本 应用安装之静默安装/卸载SDK实现
2025-07-20
AOSP中怎么基于平台向所有APP提供静默安装与卸载的能力
2025-07-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人